ireader / media-server

RTSP/RTP/RTMP/FLV/HLS/MPEG-TS/MPEG-PS/MPEG-DASH/MP4/fMP4/MKV/WebM
MIT License
3.11k stars 1.09k forks source link

ps网络流解析h264数据,播放花屏 #342

Closed gaop921766 closed 5 months ago

gaop921766 commented 5 months ago

使用libmpeg中testmpeg-ps-dec-test.cpp文件,修改从读取文件,改到接收通过国标推ps流。 修改如下: //while ((n = fread(s_packet + i, 1, sizeof(s_packet) - i, fp)) > 0) while((n = recvfrom(socket_fd, s_packet+i, sizeof(s_packet)-i, 0, (struct sockaddr)&servaddr, (socklen_t)&addr_len)) > 0) { r = ps_demuxer_input(ps, s_packet, n + i); assert(r == n + i); memmove(s_packet, s_packet + r, n + i - r); i = n + i - r; } 解析后的v.h264文件,用vlc或者ffplay播放的时候是花屏。 请教下,是我recvfrom这哪里写的有什么问题嘛?

谢谢!

gaop921766 commented 5 months ago

没有将rtp header给去掉,去掉rtp header后,再把数据喂给ps_demuxer_input就正常了;疏忽。。

dangpengsong commented 3 months ago

没有将rtp header给去掉,去掉rtp header后,再把数据喂给ps_demuxer_input就正常了;疏忽。。

你好,我也遇到这个问题了,你是怎么处理的,我把数据用rtp_packet_deserialize解析了,把payload数据存入文件,喂给ps_demuxer_input仍然不行,能指点下吗?

gaop921766 commented 3 months ago

谢谢谢谢,嗯嗯,我之前去了后就可以了。忘记回复解决了。太感谢!

dangpengsong commented 3 months ago

谢谢谢谢,嗯嗯,我之前去了后就可以了。忘记回复解决了。太感谢!

你是怎么解决的,可以给段代码参考下吗,主要是去rtp头这里,我用rtp_packet_deserialize解析留下的payload应该就是ps数据部分,不过不行,可以摘段代码给我参考下吗,万分感谢

gaop921766 commented 3 months ago

把recv的packet, 把header 12字节去了就行了

while((n = recvfrom(socket_fd, s_packet1, sizeof(s_packet1), 0, (struct sockaddr)&servaddr, (socklen_t)&addr_len)) > 0) 137 { 138 memcpy(s_packet+i, s_packet1+12, n-12); 139 140 r = ps_demuxer_input(ps, s_packet, n-12 + i);//12 is rtp header 141 assert(r == n -12 + i); 142 memmove(s_packet, s_packet + r, n-12 + i - r); 143 i = n-12 + i - r; 144 //fwrite(s_packet+12, n-12, 1, fp); //12 is rtp header //save ps stream data,vlc/ffply can play it yes... 145 //printf("pkt number is: %ld\n", i++); 146 }

dangpengsong commented 3 months ago

好的,我试试,谢谢