我想捕获视频,压缩它并将其复用为mpeg2 ts。所有这些对于 ffmpeg 库来说都非常简单,但我想做的不是将其写入文件,而是在缓冲区中捕获 ts 数据包并以其他方式使用此流。有没有简单的方法可以做到这一点?
要立即将编码帧写入文件,我使用 av_interleaved_write_frame(oc, &pkt(。OC 是定义了文件名和格式的输出上下文。pkt 是包含压缩帧的 AVPacket。av_interlaced_write_frame正在执行多路复用和写入文件。
我最终想要实现的是将相同的ts流写入多个文件,并开始和停止彼此独立的写入不同的文件。为每个流启动一个新的复用器似乎效率低下,因为 TS 流不需要任何标头或正确的结尾即可正确播放(如果我阅读的内容是正确的(
我有点迷茫地试图在 ffmpeg 代码中找到好的例子,而且库的文档不是很好。欢迎就此问题提供任何意见。谢谢!
终于让它工作了。一种方法是使用 avio_alloc_context 设置回调,您可以在其中对流执行所需的操作。这家伙有一个很好的例子:
https://github.com/EvilTengil/kinect-streamer/blob/master/src/kstreamer/ffv1_depth_encoder.cpp