我使用将摄像头中的像素缓冲区压缩成原始的h264流。我使用kVTEncodeFrameOptionKey_ForceKeyFrame来确保VTCompressionSessionEncodeFrame的每个输出都不依赖于其他部分。此外,在会话初始化期间还有kVTCompressionPropertyKey_AllowFrameReordering = false、kVTCompressionPropertyKey_RealTime = true选项,以及在每次VTCompressionSessionEncodeFrame调用之后调用VTCompressionSessionCompleteFrames。
我还收集由VTCompressionSessionEncodeFrame生成的样本,并定期将它们保存为MP4文件(使用Bento4库)。
但最终轨迹总是比样本短,在1-2秒内馈送到VTCompressionSessionEncodeFrame。经过几次尝试来解决这个问题,我可以肯定的是,它的VTCompressionSessionEncodeFrame输出帧,这取决于后来的帧被正确解码-所以这个帧是丢失的,因为他们不能用来产生“最后的块”的轨道。
那么问题来了--如何迫使VTCompressionSessionEncodeFrame生成完全独立的数据块呢?
发布于 2017-08-14 20:33:34
原来这是..。FPS问题!NAL单元本身没有特殊的定时(除了at,在我的例子中是捕获FPS限制的),所以它们以电影中FPS期望的精确速率产生是相当重要的。没有丢失任何东西,只是保存的帧播放得更快(事实上,这不是那么容易发现的)
https://stackoverflow.com/questions/45641349
复制相似问题