【问题标题】:AVPlayer not finishing the stream trackAVPlayer 未完成流轨道
【发布时间】:2013-10-21 03:06:55
【问题描述】:

我正在使用 AVPlayer 播放长音频 mp3 流音乐(8 分钟),短音乐(1 到 3 分钟)播放完美,但随着这些更大的音乐开始播放音乐,但在播放一些随机分钟后(2 到3:20) 播放器从头开始播放曲目。虽然播放器重启了音乐,但状态信息(持续时间和当前时间)一直正常计数,没有重启,只是音频重启。有人有想法吗?

我正在播放的文件是这样的:http://storage-new.newjamendo.com/download/track/57864/mp31/

播放器代码:

AVAudioSession *mySession = [AVAudioSession sharedInstance];

// Assign the Playback category to the audio session.
NSError *audioSessionError = nil;
[mySession setCategory: AVAudioSessionCategoryPlayback
                 error: &audioSessionError];

if (audioSessionError != nil) {

    NSLog (@"Error setting audio session category.");
    return;
}

// Activate the audio session
[mySession setActive: YES
               error: &audioSessionError];

if (audioSessionError != nil) {

    NSLog (@"Error activating audio session during initial setup.");
    return;
}

player = [AVPlayer playerWithURL:[NSURL URLWithString:url]];


[player play];

这就是我如何跟踪有关当前时间的信息,它会保持正常计数。

AVPlayerItem *item = player.currentItem;

CMTime duration = [item duration];
CMTime currentTime = [item currentTime];

【问题讨论】:

  • 可能和你的音乐来源有关,我是用AVplayer来播放soundcloud音乐的,没有任何问题
  • @NicolasManzini 我已经尝试使用相同的音乐源在互联网(github)上使用其他自定义播放器,但它没有发生,只是使用 AVPlayer。

标签: iphone objective-c ios7 audio-streaming avplayer


【解决方案1】:

似乎问题在于我正在流式传输的 mp3 文件是 mpeg-1,Apple 文档说我必须使用 mpeg-2,所以我刚刚更改为正确的版本,并且错误没有发生再次。

【讨论】:

  • 我遇到了同样的问题,我想知道是不是编码问题(如果我在 iTunes 中查看 MP3,他们使用的是 mpeg-1)。你能告诉我你用什么软件用 mpeg-2 编码 MP3 吗?
  • 是的@RecycledSteel,这让我的问题不那么频繁了,但过了几天我意识到这仍然在发生..所以我删除了这个问题的“已解决”..它仍然在发生..我相信那是缓存的一些问题,因为小歌曲不会发生这种情况。我在github上发现了一些没有这个问题的播放器,但不幸的是我的项目围绕这个播放器太大了,我也必须改变很多东西。我希望我能找到解决方案,如果你找到了,请告诉我。
  • 这对我来说也是一次非常大的重写。我发现当我将 Safari 流式传输到 iOS 设备(不是 MAC 或 PC)时,也会出现问题。我的音乐以一种特殊的方式流式传输,因此我将对其进行研究,刚刚在 Galaxy 上测试了相同的流式传输并且工作正常。
【解决方案2】:

我已经设法解决了这个问题,看起来(对我来说)服务器将文件作为一个块发送。

我不知道来龙去脉,但流现在以“范围”流的形式提供(我被告知它是分段提供的)。这不仅解决了问题,而且下面的这些事情开始对我有用(与提供 NaN 不同)。

float duration =  CMTimeGetSeconds(self.avQueuePlayer.currentItem.duration);

我希望这会有所帮助,我没有被告知太多关于服务器上的更改的信息。奇怪的是,我的 URL 链接几乎可以在所有其他设备上运行,但在我的应用程序和 Safari 中播放时遇到了这个问题。

【讨论】:

  • 我不明白,你到底做了什么?你的代码发生了什么变化?你是如何使用它的?
  • 我真的需要一个解决方案,你能描述一下你的播放器代码发生了什么变化吗?
  • 问题是如何从服务器而不是代码中提供流。让我将你的 URL 插入我的代码,看看会发生什么。
  • 是的,您的音乐也会在我的应用中重新启动。您能否提供有关服务器如何提供 MP3 的信息?你能把它放在你的代码中,看看持续时间是什么“float duration = CMTimeGetSeconds(self.player.currentItem.duration);” - 在服务器修复之前,我在这里得到了 NaN(不是数字)。
  • 是的,我可以正常获得持续时间,它播放了几乎 80% 的音乐。这个 url 指向一个 mp3 文件。如果你把 url 放在浏览器中,它只会下载音乐..我已经尝试过我提到的其他播放器,他们可以正常播放这个音乐,只是AVPlayer没有播放它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2015-11-16
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多