rockchip-linux / mpp

Media Process Platform (MPP) module
466 stars 155 forks source link

关于ffmpeg+mpp视频流解码的问题 #606

Closed Kevin111369 closed 1 month ago

Kevin111369 commented 1 month ago

操作

pc端将码流使用ffmpeg推流,rk3588端使用ffmpeg拉流,并将packet送入mpp进行解码

问题

pc端使用rtsp协议将码流推流到板端,可以正常解码,但是使用rtmp协议执行同样的操作,会卡在decode_get_frame(decoder设置的是阻塞模式,没有frame的时候会一直等待)

Kevin111369 commented 1 month ago

我分析了rtsp和rtmp的packet数据,packet的size都是一样的,但是packet的data有所差异,主要是head部分: RTMP 每个packet的前16个字节数据为:

00 00 00 17 67 64 00 1E AC B2 01 40 20 D0 80 00
00 00 04 D5 41 9A 3B 15 FF 04 63 0F C7 12 9F D3 
00 00 09 D3 41 9A 4F 08 64 CA 61 5F AB 88 4D 43 
00 00 04 CA 41 9A 72 78 43 C9 94 C0 AF 00 31 3F 
00 00 06 7D 41 9A 92 78 43 C9 94 C0 AF 00 31 3F 

RTSP 每个packet的前16个字节数据为:

00 00 00 01 67 64 00 1E AC B2 01 40 20 D0 80 00
00 00 00 01 41 9A 3B 15 FF 04 63 0F C7 12 9F D3 
00 00 00 01 41 9A 4F 08 64 CA 61 5F AB 88 4D 43 
00 00 00 01 41 9A 72 78 43 C9 94 C0 AF 00 31 3F 
00 00 00 01 41 9A 92 78 43 C9 94 C0 AF 00 31 3F 

这是不是mpp的h264解码的缺陷呢,对于rtmp协议的head信息无法解析? @HermanChen

Kevin111369 commented 1 month ago

需要将h264码流的视频编码格式转为Annex B格式,使用ffmpeg中的转换函数已经解决了这个问题。