在这个问题中实现了对视频(带音频)进行编码的解决方案之后,Video Encoding using AVAssetWriter - CRASHES,我发现代码在 iPhone 模拟器中可以正常工作。不幸的是,某些视频在实际的 iPhone 5(和其他设备)上运行时无法对其音频进行编码。
例如,从 WWDC 2011 示例代码 RosyWriter ( https://developer.apple.com/library/IOS/samplecode/RosyWriter/Introduction/Intro.html ) 生成的视频不会完全编码,因为该函数-[AVAssetReaderOutput copyNextSampleBuffer]
永远不会返回。
视频缓冲区正确进入,但一旦它尝试复制第一个音频 CMSampleBufferRef,调用就会挂起。当我对来自其他来源的视频(例如在本机 iOS 相机应用程序中录制的视频)尝试此操作时,音频会正确导入。
该线程https://groups.google.com/forum/#!topic/coreaudio-api/F4cqCu99nUI记录了copyNextSampleBuffer
与 AudioQueues 一起使用时挂起的函数,并建议将操作保留在单个线程上。我试过把所有东西都放在一个单独的线程上,在主线程上,但没有运气。
有没有其他人遇到过这种情况并有可能的解决方案?
编辑:从 RosyWriter 生成的视频的轨道似乎与来自本机相机应用程序的视频相反,即音频流作为流 0,视频流作为流 1。
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 60 kb/s
Metadata:
creation_time : 2013-10-28 16:13:05
handler_name : Core Media Data Handler
Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 8716 kb/s, 28.99 fps, 29.97 tbr, 600 tbn, 1200 tbc
Metadata:
rotate : 90
creation_time : 2013-10-28 16:13:05
handler_name : Core Media Data Handler
不确定这是否会对 AVAssetReader 产生影响。