Toybrick

标题: 关于mpp的h.264解码问题 [打印本页]

作者: wujialiang    时间: 2020-4-17 09:53
标题: 关于mpp的h.264解码问题
参考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    时间: 2020-4-17 10:08
mpi dec test正常么,正常的话就检查下你自己代码了。
mpp_frame_get_info_change 只会在首次允许以及宽高变换时候产生一次。
作者: wujialiang    时间: 2020-4-17 14:15
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    时间: 2020-4-17 14:33
wujialiang 发表于 2020-4-17 14:15
现在帧可以读出,但是很多的时候出现
mpp_log: decoder_get_frame get err info:1 discard:0.
就是不能正 ...

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

作者: wujialiang    时间: 2020-4-17 14:39
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    时间: 2020-4-17 15:03
wujialiang 发表于 2020-4-17 14:39
如果是单线程的话,有时候会卡在decode_get_frame一直获取不到frame,然后进入死循环。

另外,解码获取 ...

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

作者: wujialiang    时间: 2020-4-17 15:08
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    时间: 2020-4-17 15:29
wujialiang 发表于 2020-4-17 15:08
mpi_dec_test我是从这里移植过来的,mpi_dec_test不一样,他灌入的数据就一次性的把一个h.264的文件全部 ...

硬件解码无法容错,给的错的就是错的。
mpi_dec_test 完全可以跟你这一模一样,你把摄像头存成文件再发mpp 和 把264 按时间间隔一帧一帧丢进去有什么区别么?
作者: Google    时间: 2020-4-21 11:54
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    时间: 2020-4-21 12:02
Google 发表于 2020-4-21 11:54
我是用ffmpeg提取出的h264帧。也就是一个avpacket,然后将这个264帧,按大小每4k喂给mpp,这种方式也会出 ...

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

作者: Google    时间: 2020-4-21 12:18
好的。多谢指点
作者: xiaoyuan129    时间: 2020-7-20 16:51
Google 发表于 2020-4-21 11:54
我是用ffmpeg提取出的h264帧。也就是一个avpacket,然后将这个264帧,按大小每4k喂给mpp,这种方式也会出 ...

你好,我和你遇到相同的问题,请问你最后是怎么解决的?
作者: tanggou    时间: 2020-7-29 13:36
https://github.com/rockchip-linux/mpp




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3