编码器发送udp + ts 实时流,vlc显示deadLock错误

开发的编码器接收SDI的yuv源,编码成h264,使用udp + ts进行实时发送,其中ffmpeg的的mpegts发送模块,在实时发送中存在pcr抖动现象,故ts复用模块为自己编写。

在使用vlc播放实时流进行测试时,总是出现deadlock错误,如下图所示,并且黑屏不显示,而使用ffplay、potplayer等均可正常播放时,使用easyICE, 公司内部的码流分析仪、elecard、tsMuxerGUI等工具分析保存的ts文件时,均正常, 尝试分析vlc的源码也一无所获,困扰很久。

main debug: Buffering 84%
main debug: Buffering 87%
main debug: Buffering 90%
main debug: Buffering 93%
main debug: Buffering 96%
main debug: Buffering 99%
main debug: Stream buffering done (1023 ms in 1022 ms)
main error: buffer deadlock prevented
main debug: Decoder wait done in 0 ms
main debug: auto hiding mouse cursor

解决方法:

1、对于一个编码器ts流实时发送,除去音视频码率,预留 psisi 表码率 + 空包码率 >=1.6Mbps 即可, 虽然可能还会出现deadlock, 但是可以正常播放视频。

2、视频帧编码所需要的时间是抖动的,需要放入队列进行平滑处理。

3、ts打包发送前,确保队列中有缓存帧,以避免帧pts抖动。

你可能感兴趣的:(学习笔记,vlc,deadlock,编码)