在这个问题中实现了编码视频(带音频)的解决方案,使用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生成的视频相对于来自本机Camera应用程序的视频,即音频流作为流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产生影响.