5,avdec_h264使用的2种方法

方法1,和h264parse配合使用。

以前面文章里提到的例子,PIPE为:
appsrc - h264parse - avdec_h264 - videoconvert - jpegenc - multifilesink

avdec_h264一般连接在h264parse后面,用来解码H264数据。

向appsrc里面填充数据,参考前面的文章,直接把H264文件里读出来的数据不断放进去就可以了。

 

方法2,直接使用。

做点新的尝试,如果我们把中间的h264parse去掉,PIPE变成下面这样:

appsrc - avdec_h264 - videoconvert - jpegenc - multifilesink

这样流程能不能通?这个时候要如何向appsrc填充数据呢?

答案是流程可以通,不过需要自己去做parse的这部分工作,数据为上篇文章提到的,appsrc的流出数据为:

分隔符 + SPS + 分隔符 + PPS + 分隔符 + 帧数据(SPS和PPS帧不需要单独输出)。

 

我改了代码测试以后发现,直接报错: caps not negotiated(-4)

caps协商失败,需要添加caps。caps可以通过gst-inspect-1.0 avdec_h264命令来查看。

  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-h264
              alignment: au
          stream-format: { (string)avc, (string)byte-stream }

 为appsrc设置caps:

g_object_set(G_OBJECT(appsrc), "caps",
			gst_caps_new_simple("video/x-h264", "stream-format", G_TYPE_STRING,
					"byte-stream", "alignment", G_TYPE_STRING, "au", NULL),
			NULL);

尤其需要注意:
1,“stream-format”不能惯性思维写成“format”,否则很容易想不明白问题出在哪(这个困扰了我不少时间)。

2,alignment必须要添加,否则也会caps not negotiated。

 

Finally it works !

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值