环境:
到目前为止我做了什么:
我获取所拥有原始流数据并对其进行解析。由于数据是通过RTP传输的,我需要处理NAL字节、SPS和PPS。
1.编写原始文件
Byte 1: [ 3 NAL Unit Bits | 5 Fragment Type Bits]
Byte 2: [Start Bit | Reserved Bit | End Bit | 5 NAL Unit Bits]
在我的例子中,需要的片段类型有:
Fragment Type 7 = SPS
Fragment Type 8 = PPS
Fragment Type 28 = Video Fragment
NAL字节是通过将来自字节1和2的NAL单位位放在一起来创建的。
现在,根据碎片类型,我执行以下操作:
SPS/PPS:
0x00 0x00 0x01
),然后写入SPS或PPS数据具有起始位的分段
无起始位分段
[NAL Prefix][SPS][NAL Prefix][PPS][NAL Prefix][NAL Unit Byte][Raw Video Data][Raw Video Data]....[NAL Prefix][NAL Unit Byte][Raw Video Data]...
对于我在流数据中找到的每个PPS和SPS,我只编写一个NAL前缀(0x000x000x01),然后编写SPS/PPS本身。
现在我不能用一些媒体播放器播放这个数据,这导致我:
2.转换文件
由于我想避免过多地使用编解码器,所以我使用了一个现有的应用程序->FFMPEG。我用这些参数调用它:
ffmpeg.exe-f h264-i
-f h264
:这应该告诉ffmpeg我有一个h264编码流
-vcodec copy
:手册页中的引用:
强制视频编解码到编解码。使用“copy”特殊值告知原始编解码器数据必须按原样复制。
这就引出了我的问题:
我到底做了什么?
我的问题不是它不起作用。我只想/需要知道我对调用FFMPEG实际做了什么。我有一个原始的H264文件,我不能播放。使用FFmpeg后,我可以播放它。
原始的raw文件(我已经编写了)和FFMPEG编写的文件有以下区别:
当原始文件中的新视频帧以[NAL前缀][NAL单位字节][Raw视频数据]
的方式开始时,新文件中的视频帧如下所示:
[0x00 0x00][2 "Random" Bytes][NAL Unit Byte][Raw Video Data].....[0x00 0x00[2 other "Random" Bytes][NAL Unit Byte][Raw Video Data]...
我知道视频流需要一个容器格式(如果我错了,请纠正我,但我假设新的页眉和页脚负责)。但是为什么它会改变原始数据中的一些字节呢?这不可能是一些解码,因为流本身应该由播放器解码,而不是FFMPEG。
正如你所看到的,我不需要一个新的解决方法来解决我的问题,更多的是一个解释(所以我可以自己解释)。ffmpeg实际上是做什么的?为什么它会改变视频数据中的某些字节?
除了添加MP4容器之外,ffmpeg还将H.264附件B字节流(带有NAL前缀)转换为长度前缀格式。
您的[0x00 0x00][2“随机”字节]是一个32位整数,以字节为单位给出了以下NAL单元的长度。
我想把一个MP4文件转换成一个MPEG-DASH视频,可以通过Chrome上的Dash-if HTML5播放器播放。我使用FFMPEG和MP4Box(来自GPAC)对视频进行转码,然后对其进行拆分,并在JavaScript控制台上不断得到一个MEDIA_ERR_SRC_NOT_SUPPORTED错误。 从网上提供的(非常稀疏的)信息(请参见此Chromium线程)来看,Chrome似乎只支持带有约
H.264分析器可以用来分析学习H.264码流结构。可以比较详细的列出H.264码流中NAL的信息。
我已从安装ffmpeg 3.0https://github.com/FFmpeg/FFmpeg,我正在尝试将用mepeg4第2部分编码的视频转换为H264,但我得到未知编码器“libx264”错误 我试过h264, x264, libx264,都不管用) 我查看了支持的编解码器列表 这里是h264: 我使用的是ffmpeg 3.0,从列表中可以看出,似乎不支持h264编码,只支持h264解码,对吗
我正在对来自IP摄像机的视频(H.264)和音频(AAC)进行一些集成工作。 我取得了一些进步,我可以存储视频 我现在正在尝试将流混合到MP4文件中,而不进行任何解码或编码,但到目前为止还没有找到答案。 我可以通过ffmpeg:ffmpeg-I录制手动完成。h264-i录音。aac-vcodec副本-acodec副本-absf aac_adtstoasc记录。mp4 如何使用C中的ffmpeg库执
我想使用ffmpeg将RTP流转换为MP4(HTTP)流,这样我就可以在html视频标签中播放, 但我只能成功地转码到flv格式。 下面是我的设置: “其他信息” 输入格式 如果有人知道如何解决或需要更多的信息,请告诉我,谢谢!
以下代码: 无论单击的按钮如何,都会显示以下错误: j_idt6: discount tCode:验证错误。 这是怎么造成的,我该如何解决?