Toybrick

关于mpp的h.264解码问题

wujialiang

注册会员

积分
120
发表于 2020-4-17 09:53:59    查看: 23317|回复: 12 | [复制链接]    打印 | 显示全部楼层
参考mpi_dec_test的代码进行改造,在第一次灌入h.264的数据,调用mpp_packet_set_eos(packet) 后得到mpp_frame_get_info_change的事件,然后再输入新的h.264后,调用mpi->decode_get_frame(ctx, &frame)一直获取不到frame,函数返回的是MPP_OK,但是frame一直为NULL,请问是什么问题呢?








回复

使用道具 举报

jefferyzhang

版主

积分
13176
发表于 2020-4-17 10:08:15 | 显示全部楼层
mpi dec test正常么,正常的话就检查下你自己代码了。
mpp_frame_get_info_change 只会在首次允许以及宽高变换时候产生一次。
回复

使用道具 举报

wujialiang

注册会员

积分
120
 楼主| 发表于 2020-4-17 14:15:12 | 显示全部楼层
jefferyzhang 发表于 2020-4-17 10:08
mpi dec test正常么,正常的话就检查下你自己代码了。
mpp_frame_get_info_change 只会在首次允许以及宽高 ...

现在帧可以读出,但是很多的时候出现
mpp_log: decoder_get_frame get err info:1 discard:0.
就是不能正常解码的帧,是灌入的h.264数据和读取一帧的流程有问题吗?我这边是接入网络摄像头,通过ffmpeg实时获取rtsp的数据然后再灌入的。

对于不断来的h.264的数据,decode_put_packet与decode_get_frame应该怎么配合?
我现在是一个线程不断的调用decode_put_packet灌入数据,另外一个线程不断调用decode_get_frame获取frame,出来的效果就是偶尔有些帧正常解码显示,其他的一直打印mpp_log: decoder_get_frame get err info:1 discard:0.,就是异常的帧
回复

使用道具 举报

jefferyzhang

版主

积分
13176
发表于 2020-4-17 14:33:16 | 显示全部楼层
wujialiang 发表于 2020-4-17 14:15
现在帧可以读出,但是很多的时候出现
mpp_log: decoder_get_frame get err info:1 discard:0.
就是不能正 ...

没问题,随便你怎么用都可以。学安卓和ffmpeg标准用法就是单线程 put 然后while get。
或者多线程一个put一个get都可以。
回复

使用道具 举报

wujialiang

注册会员

积分
120
 楼主| 发表于 2020-4-17 14:39:36 | 显示全部楼层
jefferyzhang 发表于 2020-4-17 14:33
没问题,随便你怎么用都可以。学安卓和ffmpeg标准用法就是单线程 put 然后while get。
或者多线程一个put ...

如果是单线程的话,有时候会卡在decode_get_frame一直获取不到frame,然后进入死循环。

另外,解码获取一帧一直报
mpp_log: decoder_get_frame get err info:1 discard:0.
要怎么排查是哪方面的问题??
回复

使用道具 举报

jefferyzhang

版主

积分
13176
发表于 2020-4-17 15:03:05 | 显示全部楼层
wujialiang 发表于 2020-4-17 14:39
如果是单线程的话,有时候会卡在decode_get_frame一直获取不到frame,然后进入死循环。

另外,解码获取 ...

你看mpi_dec_test那个sample就是单线程的啊,你见他卡过么
err可能性很多啊,这个没办法简单回答,比如网络丢包或者其他送进来包格式不完整之类的,都会造成解不出来。
回复

使用道具 举报

wujialiang

注册会员

积分
120
 楼主| 发表于 2020-4-17 15:08:36 | 显示全部楼层
jefferyzhang 发表于 2020-4-17 15:03
你看mpi_dec_test那个sample就是单线程的啊,你见他卡过么
err可能性很多啊,这个没办法简单回答 ...

mpi_dec_test我是从这里移植过来的,mpi_dec_test不一样,他灌入的数据就一次性的把一个h.264的文件全部读入,我这边是实时不断的灌入h.264数据,所以就问问怎么检查到底是h.264数据流的问题还是什么,但是我是网线直接内网对接摄像头,排除网络问题导致的丢包,我在pc上跑ffmpeg解rtsp包以及软件解码是没有问题的。到了mpp上就出现很多错误的帧,所以不明在是什么原因导致。求解
回复

使用道具 举报

jefferyzhang

版主

积分
13176
发表于 2020-4-17 15:29:08 | 显示全部楼层
wujialiang 发表于 2020-4-17 15:08
mpi_dec_test我是从这里移植过来的,mpi_dec_test不一样,他灌入的数据就一次性的把一个h.264的文件全部 ...

硬件解码无法容错,给的错的就是错的。
mpi_dec_test 完全可以跟你这一模一样,你把摄像头存成文件再发mpp 和 把264 按时间间隔一帧一帧丢进去有什么区别么?
回复

使用道具 举报

Google

注册会员

积分
110
发表于 2020-4-21 11:54:57 | 显示全部楼层
wujialiang 发表于 2020-4-17 15:08
mpi_dec_test我是从这里移植过来的,mpi_dec_test不一样,他灌入的数据就一次性的把一个h.264的文件全部 ...

我是用ffmpeg提取出的h264帧。也就是一个avpacket,然后将这个264帧,按大小每4k喂给mpp,这种方式也会出现mpp_log: decoder_get_frame get err info:1 discard:0.
回复

使用道具 举报

jefferyzhang

版主

积分
13176
发表于 2020-4-21 12:02:23 | 显示全部楼层
Google 发表于 2020-4-21 11:54
我是用ffmpeg提取出的h264帧。也就是一个avpacket,然后将这个264帧,按大小每4k喂给mpp,这种方式也会出 ...

硬解码是不会给你合并帧的,丢进去硬件一帧要么解的出来,要么就解不出来。
如果送mpp的一帧不完整,你要开SPLITE_MODE,这样mpp软件部分会去合并,但是建议自己合并完完整帧再送mpp。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表