Ffmpeg 通过TestStream将h264重新打包为Matroska输出
我有一个应用程序,从用户那里捕获多个视频流,并将它们放入一个mkv输出文件中 数据来自RTP数据包。我用h264 我正在使用ffmpeg和Ffmpeg 通过TestStream将h264重新打包为Matroska输出,ffmpeg,h.264,rtp,quicktime,matroska,Ffmpeg,H.264,Rtp,Quicktime,Matroska,我有一个应用程序,从用户那里捕获多个视频流,并将它们放入一个mkv输出文件中 数据来自RTP数据包。我用h264 我正在使用ffmpeg和bytedeco/javacpp预设创建mkv 出于某种原因,将容器更改为mp4后,QuickTime Player无法播放我的输出mkv(ffmpeg-i input.mkv-c copy output.mp4)。它打开文件,但在整个过程中只显示黑色边框 我试图避免对流进行重新编码 我试图解决这个问题的其中一个方法是通过TestStream将原始h264打包
bytedeco/javacpp预设创建mkv
出于某种原因,将容器更改为mp4后,QuickTime Player无法播放我的输出mkv(ffmpeg-i input.mkv-c copy output.mp4
)。它打开文件,但在整个过程中只显示黑色边框
我试图避免对流进行重新编码
我试图解决这个问题的其中一个方法是通过TestStream将原始h264打包,然后使用ffmpeg将其再次放入mkv中:
ffmpeg-i input.mkv-c copy-f h264-| ffmpeg-i--c copy output.mkv
但由于原始h264 ByTestStream没有时间信息(ffmpeg警告此处缺少时间戳),因此它使用一些恒定的帧速率对其进行打包,从而导致与原始视频不同的视频持续时间。也就是说,从27分钟的视频中,我得到了30分钟的恒定帧速率
我正在寻找一种方法,将h264视频数据重新打包到mkv容器中,而无需重新编码
我还尝试了原始数据的NUT
容器,因为它保存了一些计时信息,但结果与QuickTime中原始的mkv-black帧相同
也许有其他方法可以调试为什么QT对我的文件不显示任何内容?是否有任何详细模式可以启用,一些日志可以查看它是否抱怨什么?在数据流级别,您需要从每个文件的开头提取SP和PPS项,并将它们放在任何其他H.264数据之前的块中
或者,您可以将avcC数据缓冲区一字不差地放入Segment/Tracks/Track/Codec的私有数据头中的.mkv流中
SP和PP是独立的NALU,Matroska将它们串联存储在SimpleBlock中
H.264视频解码器需要SPS和PPS中的数据才能工作。在数据流级别,您需要从每个文件的开头提取SPS和PPS项,并将它们放在任何其他H.264数据之前的块中
或者,您可以将avcC数据缓冲区一字不差地放入Segment/Tracks/Track/Codec的私有数据头中的.mkv流中
SP和PP是独立的NALU,Matroska将它们串联存储在SimpleBlock中
264视频解码器需要SPS和PPS中的数据才能工作