2

我有點失落。我有一個需要播放音頻和視頻文件或流的類。它有一個完全自定義的用戶界面,所以我使用AVPlayer。m3u8音頻流在MPMoviePlayerController播放,但不是AVPlayer播放?

有一個實況音頻流不會播放。每當AVPlayerItem觀察者觸發AVPlayerItemStatusFailed時,AVPlayer的錯誤都是零。

但是,當我嘗試在MPMoviePlayerController或Safari或Chrome中播放相同的音頻流時,它工作得很好。這是非常奇怪的,因爲內部MPMoviePlayerController使用AVPlayer。

這是一個失敗的直播音頻流的網址:http://bit.ly/1gIqjV6

我AVPlayer代碼(不與URL工作)

_currentItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:@"http://bit.ly/1gIqjV6"]]; 
[self startObservingPlayerItem:self.currentItem]; 

_avPlayer = [[AVPlayer alloc] initWithPlayerItem:self.currentItem]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.currentItem]; 

的AVPlayerItem觀察員

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 


    if ([object isEqual:[self.avPlayer currentItem]]) 
    { 
     if ([keyPath isEqualToString:@"status"]) 
     { 
      switch ([self.avPlayer currentItem].status) { 
       case AVPlayerItemStatusReadyToPlay: 

        NSLog(@"AVPlayerItemStatusReadyToPlay"); 
        break; 

       case AVPlayerItemStatusFailed: 

        // The live audio stream always fails, error is always nil 
        NSLog(@"AVPlayerItemStatusFailed"); 
        NSError* error = self.avPlayer.error; 
        break; 

       case AVPlayerItemStatusUnknown: 

        NSLog(@"AVPlayerItemStatusUnknown"); 
        break; 
      } 
     } 
    } 
} 

使用MPMoviePlayerController(與URL一起工作正常)

MPMoviePlayerViewController* controller = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"http://bit.ly/1gIqjV6"]]; 
[rootViewController presentViewController:controller animated:YES completion:nil]; 

有沒有人遇到過這樣的問題? 在此先感謝。

回答

1

它看起來像是你從這裏的m3u8播放列表。我用一個簡單的AVPlayer嘗試了一個空白項目,雖然測試流(「http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8」)以及來自您的 m3u8文件的'hi'和'lo'流起作用,但使用m3u8文件創建AVPlayerItem始終失敗。

在M3U8的差異如下:

此致:

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=35200, CODECS="mp4a.40.2" 

蘋果的樣品:

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000 

你有任何其他M3U8播放列表測試?

+0

感謝您的回覆。 我自己並沒有生成m3u8文件,它是由客戶交付給我們的。 我開始查看文件,並開始與我在網上找到的文檔和其他m3u8文件進行比較。 我的原始m3u8是這樣開始的:#EXTM3U 哪個不行。但是,如果我只在第一行添加8:#EXTM3U8它工作得很好。 我能找到的每個文檔都使用#EXTM3U,就像蘋果的所有例子一樣。仍然不知道這可能是什麼解釋。 – Maaike