我想要
- 启动ping命令
- 只得到第一行
- 在第一行输出后终止 ping 命令并将第一行放入变量
我做了:
firstline=$(ping -c 1 <site> > tmpfile | head -1)
但它完成了 ping 命令,然后写入 tmp 文件,然后取第一行。如何在输出第一行后终止 ping 命令的输出流?
我想要
我做了:
firstline=$(ping -c 1 <site> > tmpfile | head -1)
但它完成了 ping 命令,然后写入 tmp 文件,然后取第一行。如何在输出第一行后终止 ping 命令的输出流?
在我真正为它编写代码之前,我一直在尝试制作视频流服务器的原型。所以我使用 VLC 使用以下命令在我的服务器上进行流式传输:
cvlc video.mpg --loop --sout '#transcode{vb=0,vcodec=mpgv,fps=20,ab=0,acodec=mpga,channels=2,venc=ffmpeg}:rtp{mux=ts,ttl=10,dst=127.0.0.1,port=9554}'
流服务开始在localhost的 9554 端口上运行。经过一番研究,我未能将 VLC 流绑定到公共 IP,这是另一个值得在另一个页面上分享的问题。
问题是,为了让外部世界可以看到流媒体,我使用了 NginX 反向代理,并在 VLC over RTP上使用了HTTP流媒体。
cvlc video.mpg --loop --sout '#transcode{vb=0,vcodec=mpgv,fps=20,ab=0,acodec=mpga,channels=2,venc=ffmpeg}:http{mux=ts,ttl=10,dst=0.0.0.0:9554/live}'
好吧,除了我没有使用RTP协议之外,在我的手机上观看流媒体视频是成功的。
当我不知道如何反向代理UDP Stream时,问题就出现了。当然,NginX 不会工作,因为它只代理 HTTP 和新版本的 TCP,当然。
那么,知道如何反向代理UDP 流吗?
也欢迎任何其他相关答案,以防您知道如何将 VLC 绑定到公共地址而不是 localhost。
我正在尝试使用 FFMPEG 将 HLS 流传输到 TVHEADEND。但我无法使其工作,因为它不断收到一些找不到主机、没有到主机的路由和 TLS 握手错误。
为了测试它,我运行这个命令,用我的私有流 URL 替换 privateurl.com。
ffmpeg -user_agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100Safari/537.36" -i "https://privateurl.com:8443/stream/stream.m3u8" -c copy -f mpegts test.ts
这在 Windows(FFMPEG build 3.4.2)上完美运行,但在我的 Debian 服务器(Proxmox)上,我无法使用完全相同的命令建立稳定的连接。我在 LXC 容器中使用 FFMPEG 版本 3.2.12-1~deb9u1 和 ffmpeg 版本 3.4.4 对其进行了测试,两种情况下的结果相同。由于 HLS 是由较小的 ts 流块组成的,它似乎无法随机连接到一些声称与服务器连接不良的不同类型错误的块,但为什么呢?Windows 和 Linux 服务器都连接到同一个路由器,服务器甚至直接通过以太网连接(尝试更换电缆),但仍然无法稳定连接到流。它能够间歇性地连接和流式传输一个块,但随后它会随机停止在其他块上。
...
[tls @ 0x7f49f08eea40] The specified session has been invalidated for some reason.
[tcp @ 0x55efbe455aa0] Connection to tcp://privateurl.com:8443 failed (Host is unreachable), trying next address
Last message repeated 1 times
[hls,applehttp @ 0x7f49f08ee160] Opening 'https://privateurl.com:8443/stream/stream_982112.ts' for reading
[tcp @ 0x55efbe02fbc0] Connection to tcp://privateurl.com:8443 failed (Host is unreachable), trying next address
Last message repeated 1 times
[tcp @ 0x55efbe503280] Connection to tcp://privateurl.com:8443 failed (Host is unreachable), trying next address
Last message repeated 1 times
[tls @ 0x55ba15827580] The TLS connection was non-properly terminated.
...
VLC 也是如此。在 Windows 上我播放流,它运行良好,没有任何错误。如果我在服务器端运行 VLC,则流会间歇性地用于短时间的突发,并且控制台会收到 TLS 垃圾邮件和 No route to host 错误,如下所示:
...
[00007fec88000ef0] main tls client error: TLS session handshake error
[00007fec88000ef0] main tls client error: connection error: No route to host
[00007fec88000ef0] gnutls tls client error: TLS handshake error: Error in the push function.
[00007fec88000ef0] main tls client error: TLS session handshake error
[00007fec88000ef0] main tls client error: connection error: No route to host
[00007fec88000ef0] gnutls tls client error: TLS handshake error: Error in the push function.
[00007fec88000ef0] main tls client error: TLS session handshake error
[00007fec88000ef0] main tls client error: connection error: No route to host
...
我尝试使用 traceroute、tcptraceroute、ping 到 privateurl.com 和它的端口,尽管我尝试使用这些命令出错,但它总是能完美运行。
所以现在我完全不知道如何使这项工作或尝试什么来找出导致问题的原因。在我看来,Linux 中的 TLS 堆栈似乎刚刚损坏或者是 FFMPEG 错误,但我只是不知道为什么它在 Windows 中有效,但在我的 Linux 服务器上无效。
有人有想法吗?
我正在使用该命令socat
从实时直播流中转发连接。
TCP4-LISTEN:8080 TCP4:123.456.789.12:80
问题是它增加了延迟和低 fps,而没有端口转发的实时流完美地工作,没有延迟和高 fps。
socat
或者我应该使用另一种方法?我有充分的理由使用 Opera 作为我的默认浏览器(我发现它比 Firefox Quantum 和 Chrome/Chromium 更轻巧,我喜欢它的快速拨号书签,以及其他功能和细节)。
Opera 浏览器无法播放 Youtube 流媒体视频。
普通(非现场)youtube 视频工作正常。
我知道 Youtube 不涉及 flash,但为了在更大的上下文中调试它可能会证明在 Youtube 中不播放实时流的相同浏览器(Opera 和 Chromium)也受到问题的影响。无法播放(至少)一些其他(可能是 Flash)互联网视频流 - 而 Google Chrome 和 Firefox 不受这些问题的影响。
帮我调试一下。
我使用的是最新的基本操作系统 Loki,Opera 52.0.2871.40。
我也发布了这个问题:How to tell if an internet video is flash or html5。
chromium-codecs-ffmpeg-extra
为播放 Vimeo 视频而安装(如此处所示)为 Chromium解决了 我在使用 Opera 和 Chromium 时遇到的所有问题(不播放实时流和许多其他非实时在线视频):但不适用于 Opera。