aet*_*the 5 iphone objective-c avfoundation ios avqueueplayer
我有一个AVQueuePlayer,在特定的情况下,它会在上一首曲目结束之前开始播放下一曲目.它不会同时播放它们,只是提前删除第一首曲目并开始下一首曲目.当两个轨道都是http流时,这肯定会发生,我在本地播放文件时没有尝试过.而且,每次跟踪都不会发生这种情况.只有特定的两个曲目放在一起时才会导致问题.大多数曲目都没有这个问题,但是很多都有.其他媒体播放器在送入这些曲目时不会出现这些症状.显示症状的曲目必须是AAC编码的,我在播放MP3版本时没有这样的问题.AAC文件使用libfaacVBR 90%进行编码.用于编码轨道的确切命令行:
ffmpeg -loglevel error -probesize 10000000 -i "$input" -strict -2 -acodec libfaac -q:a 90 -vn "$output.m4a"
Run Code Online (Sandbox Code Playgroud)
我相信这个问题是涉及到编辑:确定不是原因,见下文.AVQueuePlayer积极努力无间隙播放曲目,因为我知道有包含在AAC,让两条轨道在顺序播放无间隙(电子混音特别有用)一些元数据-这些文件不应该有这样的元数据但是,AVQueuePlayer当播放两首不相关的曲目时,它肯定不会引起恐慌吗?
如果你想自己重现这个问题,只需要极少量的代码,只需要创建一个基本的项目,包含AVFoundation,然后执行如下操作:
self.queuePlayer = [AVQueuePlayer queuePlayerWithItems: @[[AVPlayerItem playerItemWithURL: [NSURL URLWithString: @"https://eqbeats.org/track/4875/aac"]], [AVPlayerItem playerItemWithURL: [NSURL URLWithString: @"https://eqbeats.org/track/4499/aac"]]]];
[self.queuePlayer play];
Run Code Online (Sandbox Code Playgroud)
让第一首曲目几乎完成(它将持续约100秒左右),你会听到它突然结束,第二首曲目将会出现.
我认为有一些解决方法,例如在下一首曲目开始时截取消息并检查上一首曲目的播放状态,或者只在前一次启动后将下一个项目添加到队列中...但我担心这些方法的可靠性,特别是当应用程序背景时.如果没有针对此客户端的修复,我可以调查是否有一种方法来剥离此元数据服务器端(假设这是问题)或者只是让自己使用更大,更糟糕的MP3版本.
AVFoundation只是骚乱-我敢肯定,任何人谁是有恐怖与它的工作会同意的.我正在讨论是否将此作为Apple的一个错误提出来,但由于它在两个主要的iOS更新中幸存下来,我觉得这个东西只是照常生活AVQueuePlayer.从我对这个问题的研究来看,我显然不是唯一一个在这个框架上挣扎的人:
完全披露:我的应用程序实际上是用RubyMotion编写的,但是我已经能够用更少的代码重现Objective-C中的问题(所以很少有可能的失败点),所以我很确定RubyMotion或者我的使用AVFoundation不是罪魁祸首.
编辑:刚刚使用file://链接测试了本地文件,问题仍然存在,所以它绝对不是流媒体引擎或网络服务器的问题.
编辑2:我已经研究了MP4规范以及iTunes和AVFoundation如何确定MP4中的无间隙.在原来moov.udta.meta.ilst.---原子,应该有三个原子,mean,name,和data,它告诉解码器来重新创建无间隙的所需要的各种位.然而,导致问题的文件没有这些原子,所以它绝对不是无间隙播放的结果.我决定通过CoreAudio的AAC编码器运行原始文件(一个是FLAC,另一个是MP3),生成的文件完全正常AVQueuePlayer(甚至在我删除所有无间隙标签后AtomicParsley),所以它看起来像一个bug 处理非Apple AAC比特流时libfaac的输出或AVFoundation解码器.
不要libfaac与AVFoundation一起使用.它不喜欢它.我们现在正在使用libfdk它并没有太糟糕.
ffmpeg -loglevel error -probesize 10000000 -i "$input" -acodec libfdk_aac -vbr 3 -vn "$output.m4a"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |