2017-10-17 4 views
2

RTSP/UDP経由でH.264/MPEG4/MJPEGビデオをストリームするIPカメラ製品を開発します。 Webインターフェイスがあります。現在、VLC Firefoxプラグインを使用してブラウザのライブRTSPストリームを表示できますが、FirefoxはNPAPIプラグインのサポートを中止しており、現在はデッドエンドです。ウェブブラウザでライブビデオをストリーミングする現在のベストプラクティス?

カメラ自体は比較的低消費電力のARM SoC(ラズベリーPiレベルだと思う)なので、ボード上でオンザフライでオンザフライでストリームをストリームするような広大なスペアリソースはありません。

主な目的は、ビデオストリームがウェブインターフェイスから正しく動作しているかどうかをチェックすることです。新しいストリームをストリーミングする(またはトランスコードする)ことは、他のフォーマット/トランスポート/ストリーミングエンジンでは、オリジナルのRTSPストリームを直接送信します。通常の使用では、ビデオはRTSPを介してVMSサーバにストリーミングされるため、改ざんされません。

解決策は、オープンソースのクロスブラウザとHTML5タグの内部で起こりますが、最も一般的なブラウザの1つ以上で動作する場合は、それを使用します。

私は、HTML5ビデオタグ、WebRTC、HLSなどの勇敢な新しい世界について、ここや周りのあらゆる種類のものを読んできましたが、まだ分かりやすい完全なソリューション余分な変換/トランスコーディング/リストリーミングを必要としません。多くの場合、サポートされているフレームワークが半分か、実行可能な解決策ではない余分なサーバーがあります。

私たちのストリームを「what-html5-video-like」に「変換」する必要があるかもしれないし、必要でないかもしれないことについての適切な記述がまだ見つかりませんでした。オーバーヘッドが多く、すべてが異なる場合。同様に、変換がJSを使ってオンボードでも、おそらくブラウザでも達成できるかどうかは不明です。

タイトルの理由は、すべての仕組みを変えなければならないとすれば、「ベストプラクティス」とみなされ、適切なものではなく、次のW3Cのプレスリリースよりもうまくいかないかもしれない。

私は、2017年にはこれを達成するための合理的な方法がないように思うが、少し残念だが多分驚くことではない。

おそらく、「少なくとも最悪の練習は」より適切な用語だろう...

+0

悲しいことに、トランスコードを追加したくない場合にブラウザをターゲットにしたい場合は、オリジナルを再考する必要があります。 WebRTCやMPEG Dash(https以上)は、おそらく最も長期的なプラットフォームに依存しないソリューションですが、そのためにカメラをアップデートする必要があることをサポートするために... VLCは、 、サポートされなくなった – Offbeatmammal

答えて

2

あなたはそれがトランスコーディングを必要としない使用することができます多くの方法があります。

あなたはRTSPを使用している場合のWebRTC

、あなたはそこのWebRTCを経由して、あなたのストリームを送信する際の方法の多くのです。

WebRTCはストリームの宣言にSDPを使用し、これらのストリームの転送にはRTPを使用します。 WebRTC呼び出しを設定するために必要ないくつかのレイヤーがありますが、特に高価な計算を必要としません。ほとんどの(すべて?)WebRTCクライアントはH.264デコードをサポートし、多くはブラウザ内のハードウェアアクセラレーションを備えています。

WebRTCを使い始める最も簡単な方法は、ブラウザ間のクライアントを最初に実装することです。次に、独自の実装でより深い層に移動できます。

WebRTCはあなたにお勧めのルートです。 NATトラバーサル(ほとんどの場合)とP2P接続が組み込まれているため、顧客はIPアドレスを覚える必要はありません。シグナリングサービスを提供するだけで、どこからでも自宅のカメラに直接接続できます。 TURNサーバーを提供すると、両方のサーバーがファイアウォールされていても接続できます。このようなサービスを提供したくない場合は、軽量で、今日のようなモードでカメラで直接実行できます。 <video>タグ

とHTTPプログレッシブオーバー

断片化されたMP4は、この方法では、のWebRTCよりもはるかに簡単ですが、あなたが今やっていることとは全く異なります。あなたはH.264ストリームを取って、トランスコードせずにMP4で直接ラップすることができます。その後、ページの<video>タグで再生することができます。これを使用して、クライアントへのパイプと思います、あなたはあなたのコード内の適切なLIBSを実装する必要がありますが、ここではSTDOUTに出力FFmpegの例です:

ffmpeg \ 
    -i YOUR_CAMERA_HERE \ 
    -vcodec copy \ 
    -acodec copy \ 
    -f mp4 \ 
    -movflags frag_keyframe+empty_moov \ 
    - 

その他...あなたの場合

を、 DASHには何のメリットもありません。 DASHはストリーミングにファイルベースのCDNを利用するためのものです。あなたはサーバーを制御するので、ファイルの書き出しやファイルのようなHTTPリクエストの処理は必要ありません。トランスコードすることなくH.264ストリームで確実にDASHを使用することができますが、時間の無駄です。

HLSはほとんど同じです。あなたのストリームはHLSと互換性がありますが、HLSはコーデックの柔軟性が欠けているため急速に好意を失っています。 DASHとHLSは基本的に同じメカニズムです... CDNに多数のメディアセグメントを書き込んで、どこにあるかを示すプレイリストまたはマニフェストを作成します。

+0

ありがとうございました、あなたは少なくとも、さまざまなTLAの状態を明らかにしました。それは私だけですか、WebRTCのホームページは実際に有用なことを実際に説明したり、「ストリーム・ビデオ」の基本的な実用的な例を提供していませんか? –

+2

@ JohnU WebRTCは狂って複雑で、ドキュメントはほとんどありませんが、一般的に恐ろしいです。ここから始めてください:https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API#Guides https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols – Brad

+0

再度、感謝します!これは私の正気を救うものではないかもしれませんが、少なくともあなたはその終焉を長くしています。 –

関連する問題