FFMPEG如何解码播放通过socket接收的网络码流(h264)?

styyzx 发布于 2014/02/21 14:12
阅读 1K+
收藏 0

@Jackarain 你好,想跟你请教个问题:
FFMPEG如何解码播放通过socket接收的网络码流(h264)?

AVCodecContext* ctx = avcodec_alloc_context();
ctx->extradata = new uint8_t[sps_pps_len];
ctx->extradata_size = sps_pps_len;
memcpy(ctx->extradata, sps_pps, sps_pps_len);
AVCodec* dec = avcodec_find_decoder(CODEC_ID_H264);
avcodec_open(ctx, dec);

然后就是avcodec_decode_video....  

这里的sps_pps是怎么获取的?如果是接收到完整的一帧图像再处理,该怎么解码?

加载中
0
Jackarain
Jackarain
h264编码的时候, 会生成sps,pps信息的
Jackarain
Jackarain
回复 @呼神护卫 : 你试试decode后看看ctx里是不是有长宽?
呼神护卫
呼神护卫
你好,按照您给出的代码流程,应该是在avcodec_open2 执行的时候,由extradata中的信息来设置avcodecContext 的width 和height吧?但是我按照这个流程做了,avcodec_open2成功返回了0,但是width height仍然是0呢?还是说这里需要另外设置?可是视频的长和宽就存储在SPS PPS里面啊。
0
styyzx
styyzx
@Jackarain   00 00 00 01 67 42 00 1E 59 02 83 F5 34 /0 03 6E 58 00 3D 6E 60 0D /8 10 04 00 00 00 01 68 3E 31 52,这部分就是sps和pps的数据,要不要去掉00 00 00 01,然后变成67 42 00 1E 59 02 83 F5 34 /0 03 6E 58 00 3D 6E 60 0D /8 10 04 68 3E 31 52这样?
呼神护卫
呼神护卫
回复 @Jackarain : 处理伪起始码,是把SPSPPS里面插入的0x03去掉吗?
Jackarain
Jackarain
嗯, 需要去掉的, 不仅需要去掉startcode, 还需要处理数据中的伪起始码
返回顶部
顶部