我正在尝试做一个小型收音机应用程序,我得到了一个URL列表,我将其传递给AVPlayer,但我无法理解如何管理不同的URL。
例如,如果我首先播放此网址:http://www.example.com/file.mp3 然后我打电话给http://www.example.net/file2.mp3 它工作正常,但是当我选择http://www.example.org/file.mp3.m3u时,它不会加载该URL并且AVPlayer将无法播放。
这是我使用的代码:
urlStream = [NSURL URLWithString:mp3URL];
appDelegate = [[UIApplication sharedApplication]delegate];
playerItem = [AVPlayerItem playerItemWithURL:urlStream];
playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];
[appDelegate.player replaceCurrentItemWithPlayerItem:playerItem];
我使用replaceCurrentItemWithPlayerItem:playerItem
因为如果我在选择其他流时使用initWithPlayerItem
我就无法停止上一个播放:所以停止播放流并启动另一个流的唯一方法是使用replaceCurrentItemWithPlayerItem
。
在Apple文档中,我读到replaceCurrentItemWithPlayerItem
必须与它所替换的项目具有相同的“compositor”:什么是合成器?
我看到前两个流和第三个流(在上面的示例中)之间的区别是文件扩展名。
任何建议在哪里寻找都将非常感激。
答案 0 :(得分:2)
问题似乎不是替换项目 - 而是特定文件的文件格式。尝试首先打开m3u文件 - 可能它也会失败。
m3u-URL表示这不是mp3文件而是m3u文件 - 这是媒体文件的URL列表。 AVPlayer
和AVPlayerItem
能够播放m3u8文件 - 即m3u文件,这些文件是UTF8编码的。
您是否尝试在Mobile Safari中打开这些网址?如果它们不起作用,AVPlayer
可能也不支持该格式。
在任何情况下 - 如果您可以提供实际有问题的URL,则可以检查实际的文件格式。
对于“compositor”,“Quartz compositor”意味着 - 忘记这一点,这里不相关。 [编辑:也许这是相关的 - 在您对此答案发表评论后我感到茫然......]