小编Jun*_*Jun的帖子

如何将RTP/H264流写为文件

我找不到上一个问题的解决方案,所以我决定一步一步地尝试.

我现在要做的是将RTP/H264流存储为文件.

到目前为止我发现的是以下内容:

(首先我的RTP/H264是FU-A的形式)

| RTP HEADER 12bytes long | FU INDICATOR 1byte | FU HEADER 1byte | FU payload |
Run Code Online (Sandbox Code Playgroud)

据我了解RFC 6184文档,我正在使用一个数据包启动一个NAL,该数据包在FU Header的第一位有'1',并追加在第一位设置'0'的数据包,直到最后一个数据包为'1'在FU Header的第二位.

我认为这是如何在FU-A分组化之前获得完整的NAL以及我发现的是我需要将'起始位'(0x00000001)放在每个完整NAL的前面.

但到目前为止没有运气.以下是日志的一部分

 ========= the new NAL is as 1400
 [0]0/0 [1]0/0 [2]0/0 [3]1/1 [4]7C/1111100 [5]85/10000101 [6]B8/10111000 [7]40/1000000 ...
 ========= adding the next NAL as 1400
 [0]0/0 [1]0/0 [2]0/0 [3]1/1 [4]7C/1111100 [5]85/10000101 [6]B8/10111000 [7]40/1000000 ...
 ========= adding the next NAL as 1400
 [0]0/0 [1]0/0 [2]0/0 [3]1/1 [4]7C/1111100 [5]85/10000101 [6]B8/10111000 [7]40/1000000 ...
 ========= adding the …
Run Code Online (Sandbox Code Playgroud)

streaming ffmpeg rtp h.264

10
推荐指数
2
解决办法
9293
查看次数

使用FFmpeg,如何解码H264数据包

我是FFmpeg的新手,正在努力解码可以作为uint8_t数组获得的H264数据包.

经过多次调查,我认为它应该能够将数组放入如下所示的AVPacket中

AVPacket *avpkt = (AVPacket *)malloc(sizeof(AVPacket) * 1);
av_init_packet(avpkt);  
avpkt->data = ct;   // ct is the array
avpkt->length =....
Run Code Online (Sandbox Code Playgroud)

并通过avcodec_decode_video2()进行解码.代码的一部分就像

...
codec = avcodec_find_decoder(CODEC_ID_H264);
gVideoCodecCtx = avcodec_alloc_context();
gFrame = avcodec_alloc_frame();
avcodec_decode_video2(gVideoCodecCtx, gFrame, &frameFinished, packet);
...
Run Code Online (Sandbox Code Playgroud)

我想我正确设置了所有必需的属性,但这个函数只返回-1 :(

我刚发现-1来自

ret = avctx-> codec-> decode(avctx,picture,got_picture_ptr,avpkt);

在avcodec_decode_video2();

实际上,我想知道的是我是否可以通过avcodec_decode_video2()解码H264数据包(没有RTP头).

我在这里先向您的帮助表示感谢.


/////////// 添加

好的,我还在努力寻找解决方案.我现在正在做的是下面的内容

**该RTP流中的H264流由FU-A编码

  1. 收到RTP数据包

  2. 查看RTP头的第二个字节是否> 0表示它是第一个数据包(可能会被跟踪)

  3. 看看下一个RTP数据包的第二个字节是否也> 0,那么这意味着前一个帧是一个完整的NAL,或者如果这个<0,则该数据包应该附加到前一个数据包.

  4. 删除数据包的所有RTP头,使其只有FU指示符| FU标题| NAL

  5. 尝试用avcodec_decode_video2()播放它

但它只返回-1 .....我是否应该删除FU指示器和标题?

任何建议将非常感谢

提前致谢.

streaming ffmpeg decode h.264

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

ffmpeg ×2

h.264 ×2

streaming ×2

decode ×1

rtp ×1