FFMPEGを使用してHLSをTVHEADENDにストリーミングしようとしています。ただし、「ホストが見つかりません」、「ホストへのパスがありません」、およびTLSハンドシェイクエラーが引き続き発生するため、機能できません。
テストするには、このコマンドを実行してprivateeurl.comを私のプライベートストリームURLに置き換えました。
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ビルド3.4.2)ではうまく機能しますが、私のDebianサーバー(Proxmox)では同じコマンドを使用して安定した接続を確立することはできません。 LXCコンテナ内でFFMPEGバージョン3.2.12-1〜deb9u1とffmpegバージョン3.4.4を使用してテストしましたが、結果はどちらの場合も同じでした。 HLSは小さな塊のtsストリームで構成されているため、サーバーへの接続が間違っているように見えるさまざまな種類のエラーを主張するいくつかの塊にランダムに接続できないようです。しかし、その理由は何ですか? WindowsサーバーとLinuxサーバーの両方が同じルーターに接続されており、サーバーがイーサネットを介して直接接続されていますが(ケーブルを変更しても)、安定したストリーム接続はまだ行われていません。あるブロックを断続的に接続して転送できますが、他のブロックではランダムに停止します。サーバーのFFMPEGエラー出力は次のとおりです。
...
[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 でスパム処理され、次のホストエラーへのパスはありません。
...
[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サーバーでは動作しないのかわかりません.
誰にもアイデアがありますか?
答え1
それで、ついに謎が解けました。 IPv6を無効にすると問題が解決しました。
/etc/sysctl.confに追加してIPv6を無効にしました。
ライン:
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
これは実際の修正に近いです。 IPv6を正しく設定すると、この問題も解決されます。しかし、私の場合、今はIPv6を無効にするだけで十分です。
このトピックに関する追加コメントをいただいた@peterhに感謝します。将来的には、IPv4とIPv6を区別するためのより良いエラーメッセージがあることを願っています。