IOS AVPlayer не воспроизводит видео

Я пытаюсь воспроизвести видео, используя код из учебника, но он не работает.

Вот код, который я использую:

- (void) viewDidAppear:(BOOL)animated
{
    avAsset = [AVAsset assetWithURL:[NSURL URLWithString:filePath]];
    avPlayerItem =[avPlayerItem initWithAsset:avAsset];
    avPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem];
    avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
    [avPlayerLayer setFrame:self.view.frame];
    [self.view.layer addSublayer:avPlayerLayer];
    [avPlayer seekToTime:kCMTimeZero];
    [avPlayer play];

}

Я не знаю, что не так, он не дает никаких ошибок, он просто дает черный экран. Спасибо.


person Ashraf Hussein    schedule 12.05.2013    source источник


Ответы (4)


Спасибо s1mon и matt за вашу помощь.

Вот новый код, который может кому-то помочь:

- (void) viewDidAppear:(BOOL)animated
{
    avAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:filePath]];
    avPlayerItem =[[AVPlayerItem alloc]initWithAsset:avAsset];
    avPlayer = [[AVPlayer alloc]initWithPlayerItem:avPlayerItem];
    avPlayerLayer =[AVPlayerLayer playerLayerWithPlayer:avPlayer];
    [avPlayerLayer setFrame:self.view.frame];
    [self.view.layer addSublayer:avPlayerLayer];
    //[avPlayerLayer setBackgroundColor:[[UIColor redColor]CGColor]];
    [avPlayer seekToTime:kCMTimeZero];
    [avPlayer play];

}

Спасибо.

person Ashraf Hussein    schedule 12.05.2013
comment
Я попытался реализовать тот же код в своем приложении, я использую Tableview для отображения всех видео, поступающих с сервера, у меня есть URL-адрес для видео, когда я передаю это в ячейку, чем он не воспроизводит, пожалуйста, помогите ... - person ravinder521986; 01.08.2015
comment
Интересно, как я установил красный цвет фона, как вы это делали в закомментированном коде, чтобы слой был виден на экране. - person ninjaneer; 01.02.2016

Возможно, это не настоящая проблема, но этот код определенно неверен:

[NSURL URLWithString:filePath]

Прежде всего, постарайтесь не начинать с пути к файлу; начать с URL-адреса файла. Таким образом, преобразование не требуется. Но если вы должны выполнить преобразование пути к файлу в URL-адрес, используйте fileURLWithPath:isDirectory:. URL-адрес файла - это особый вид животного, и вы должны запрашивать его специально, когда конвертируете с пути.

person matt    schedule 12.05.2013
comment
Видимо, в этом и была проблема: D Спасибо, ссссссс: D - person Ashraf Hussein; 12.05.2013
comment
Это смешно. И URLWithString, и fileURLWithPath: создают допустимый NSURL экземпляр. Почему первое не работает с AVPlayer, для меня не имеет смысла. - person Legoless; 27.04.2015

Я думаю, вы забыли создать экземпляр AVPlayerItem в этой строке:

avPlayerItem =[avPlayerItem initWithAsset:avAsset];

Это просто отправляет initWithAsset: в avPlayerItem (который, вероятно, равен нулю при вызове этого метода). Попробуйте изменить его, чтобы создать экземпляр нового AVPlayerItem, который затем можно назначить avPlayerItem, например:

avPlayerItem = [[AVPlayerItem alloc] initWithAsset:avAsset];
person s1m0n    schedule 12.05.2013
comment
Это тоже было проблемой: D Спасибо: D - person Ashraf Hussein; 12.05.2013

Для тех, кто ищет swift 2.0 version, вот что сработало для меня. Ваше здоровье.

import Foundation
import UIKit
import AVKit

class VideoViewController: AVPlayerViewController {

    override func viewDidAppear(animated: Bool) {
        self.setupVideoPlayerView()
    }
    private func setupVideoPlayerView()
    {
        let path = "HTTP_VIDEO_URL_HERE"
        let nsURL = NSURL(string: path)
        let avAsset = AVAsset(URL: nsURL!)
        let avPlayerItem = AVPlayerItem(asset: avAsset)

        let avPlayer = AVPlayer(playerItem: avPlayerItem)
        let avPlayerLayer = AVPlayerLayer(layer: avPlayer)

        avPlayerLayer.frame = self.view.frame
        self.view.layer.addSublayer(avPlayerLayer)

        self.player = avPlayer

        self.player!.seekToTime(kCMTimeZero)
        self.player!.play()

    }

}
person kemicofa ghost    schedule 23.08.2016