rockchip-linux / mpp

Media Process Platform (MPP) module
528 stars 161 forks source link

用ffmpeg拉流,交给mpp解码h265一直frame is none(但解码264正常) #644

Open HouLingLXH opened 1 month ago

HouLingLXH commented 1 month ago

我使用ffmpeg 拉取rtsp流,并将packet数据交给mpp进行解码, 当视频流为h264时,我设置解码为 MPP_VIDEO_CodingAVC ,解码成功; 当视频流为h265时,我设置解码为 MPP_VIDEO_CodingHEVC,解码失败: decode_get_frame获取的frame 一直是 none

按理说从h264切换为h265解码应该只要修改MPP_VIDEO_CodingHEVC,其他的都不用动吧? 为什么不对呢? mpp版本是 d378a28e author: daijh 2023-12-22 update version (HEAD, m/firefly/ubuntu, firefly-linux/rk3588/firefly)

HermanChen commented 1 month ago

是在什么芯片上

HouLingLXH commented 1 month ago

3588

HermanChen commented 1 month ago

那不应该,用 develop 最新试试看

HouLingLXH commented 1 month ago

刚试了,还是不行

HouLingLXH commented 1 month ago

我是用ffmpeg的av_read_frame 方法循环的获取到AVPacket 数据,然后把data和size传递给mpp解码器解码

大概流程是这样 AVPacket pkt; av_read_frame(ctx_in,&pkt) ....

uint8_t* pkt_data = pkt->data; int pkt_size = pkt->size ; mpp_packet_set_data(packet, pkt_data); mpp_packet_set_size(packet, pkt_size); mpp_packet_set_pos(packet, pkt_data); mpp_packet_set_length(packet, pkt_size);

ret = mpi->decode_put_packet(ctx, packet);

在h264 时是正常的, h265就不行了。 请问还有哪里需要改吗?除了MPP_VIDEO_CodingHEVC

HermanChen commented 1 month ago

不太了解,正常应该不需要了,存码流下来看看是不是 vps/sps/pps 什么的没送

HouLingLXH commented 1 month ago

额,这个要怎么看啊? 我用vlc拉流, 还有用ffmpeg直接软解都是正常的

HouLingLXH commented 1 month ago

这样会有问题吗: hevc @ 0x560492798280] PPS id out of range: 0 Last message repeated 1 times [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0 Last message repeated 3 times [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0 [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0 [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0 Last message repeated 1 times [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0 Last message repeated 4 times [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0 [hevc @ 0x560492798280] Error parsing NAL unit #0. [hevc @ 0x560492798280] PPS id out of range: 0

HermanChen commented 1 month ago

说明给的码流里没有 vps/sps/pps,把头信息给丢了

HouLingLXH commented 1 month ago

我是用 mediamtx + ffmpeg ,推送一个h265编码的MP4为 h265的 rtsp流,然后再拉流解码 使用vlc可以正常播放, 使用ffmpeg软解码方式可以获取图像帧。 如果是h264的,mpp解码正常 但是h265的话,用mpp解码一直为none

换成从一个真实的h265录像机拉流, mpp解码可以正常

jjxyai commented 3 weeks ago

我也遇到了,解析一个h265的MP4视频 1724296179281 log显示:H265D_PARSER: No start code is found. 不知道直接用ffmpeg hw_decode来解码,不用这mpp的api了