av_interleaved_write_frame():Broken pipe

使用FFmpeg命令rtsp推流到Docker中MediaServer服务器,15秒timeout一到就会打印错误信息,如下图:
av_interleaved_write_frame():Broken pipe
在这里插入图片描述

命令中指定rtsp传输方式为tcp(-rtsp_transport tcp ),虽然不会出现上面的问题,但是不符合我们的使用要求,因此就怀疑是不是docker映射端口有问题。

Docker映射端口:

-p 1935:1935 -p 554:554 	//默认TCP,即如上图 554:554/tcp
-p 554:554/udp				//指定为UDP,即如上图 554:554/udp

然后测试发现,端口映射指定了UDP仍然不能解决此问题。
后来突发奇想,让docker容器打开时,映射所有端口,能不能就解决这个问题了呢?
找到命令参数:

--net host

我们在使用docker run创建Docker容器时,可以用–network标志选项指定容器的网络模式,Docker有以下4种网络模式:

  • host模式:使用 --net=host 指定。
  • none模式:使用 --net=none 指定。
  • bridge模式:使用–net=bridge 指定,默认设置。
  • container模式:使用 --net=container:NAME_or_ID 指定。

host模式
Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。host模式类似于Vmware的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

经过测试,发现指定容器的网络模式为host能解决此问题!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部