在实现了这个问题中有关编码视频(包括音频)的解决方案Video Encoding using AVAssetWriter - CRASHES之后,我发现代码在 iPhone 模拟器上可以正常工作。但是,在实际 iPhone 5(和其他设备)上运行时,某些视频无法对其音频进行编码。
例如,从 WWDC 2011 示例代码 RosyWriter(https://developer.apple.com/library/IOS/samplecode/RosyWriter/Introduction/Intro.html)生成的视频因为函数
尽管视频缓冲区正确到达,但是一旦尝试复制第一个音频 CMSampleBufferRef,调用就会挂起。当我尝试使用来自其他来源的视频,比如在本机 iOS 相机应用程序中录制的视频时,音频可以正确导入。
这条线程https://groups.google.com/forum/#!topic/coreaudio-api/F4cqCu99nUI提到了使用AudioQueues时
是否有其他人遇到过这种情况并有可能的解决方案? 编辑:看起来从RosyWriter生成的视频与原生相机应用程序生成的视频相比,它们的轨道是相反的,即音频流作为流0,视频流作为流1。
例如,从 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提到了使用AudioQueues时
copyNextSampleBuffer
函数会出现挂起的情况,并建议在单个线程上进行操作。我已经尝试将所有内容保留在单独的线程或主线程上,但没有成功。是否有其他人遇到过这种情况并有可能的解决方案? 编辑:看起来从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产生影响。