解决摄像头花屏问题:将网络摄像头传输协议由UDP改为TCP

问题描述

预览网络摄像头的画面时,经常出现雪花屏的问题。原因是网络摄像头默认使用RTSP协议,RTSP下层默认使用UDP传输,而UDP传输是不可靠的,会丢包,所以导致雪花屏。

问题解决

网络摄像头支持RTSP使用TCP或者UDP传输,使用TCP还是UDP取决于客户端的SETUP请求。SETUP请求中的Transport是TCP就使用TCP传输,Transport是UDP就使用UDP传输。
TCP提供可靠的传输,所以决定将网络摄像头传输协议由UDP改为TCP。使用ffmpeg采集网络摄像头的视频流存为mp4,默认UDP传输,以海康摄像头为例,命令行如下:

ffmpeg -i  rtsp://admin:123456@192.168.2.4:554/h264/ch33/main/av_stream  mycamera.mp4

使用TCP传输:

ffmpeg -i -f rtsp -rtsp_transport tcp rtsp://admin:123456@192.168.2.4:554/h264/ch33/main/av_stream  mycamera.mp4

如果使用代码采集视频,则需加上以下代码:

AVDictionary *ifmtdict; 
av_dict_set(&ifmtdict, "rtsp_transport", "tcp", 0); 
... 
avformat_open_input (..., &ifmtdict); 

命令行和代码原理上是一样的。我试验过,两种方式都可行。抓包验证,如图所示:
解决摄像头花屏问题:将网络摄像头传输协议由UDP改为TCP_第1张图片
解决摄像头花屏问题:将网络摄像头传输协议由UDP改为TCP_第2张图片

你可能感兴趣的:(解决摄像头花屏问题:将网络摄像头传输协议由UDP改为TCP)