4

私は幼稚園の小さなチェーンのIT担当者です。現在の各学校には、古いAxis205,206モデルからAxisM1011まで、それぞれ約30〜40のAxisIPWebカメラがあります。これらのカムを使用すると、保護者はWebサイトにログインして、1日を通して子供の教室を見ることができます。IPカムはローカルネットワーク上にあり、ポート80でストリーミングされます。各学校には1つのパブリックIPアドレスがあり、その上にリバースプロキシHTTPサーバーがあります。基本的にURLの書き換えを行うことで、Axis WebカメラからMJPEGを直接提供し、クライアント表示アプリがAxisHTTPAPIを介してカムに直接アクセスできるようにします。

これは何年もの間うまく機能しており、最近までiPhoneでも機能していました。実際、iPhoneでも動作しますが、Wi-Fiに接続している場合に限ります。iPhoneが3G経由で接続されている場合、MJPEGストリームは機能しなくなります。キャリアはAT&Tです。

私は過去数日間かなりの調査を行い、Appleデバイス用のHTTPライブストリーミングに移行する必要があることを知っているので、解決しなければならないパズルのさまざまな部分に頭を悩ませようとしていますそれを機能させる。

Axisカムの組み合わせが問題になる可能性があります。Axis 205および206はMJPEGのみですが、M1011はh.264を提供できますが、明らかにRTSP経由でのみ提供されます。必要な場合、またはソリューション全体に役立つ場合は、古いAxisカムをM1011に交換したいと思います。

これまでの私の理解から、私が最初に整理しなければならないことは、30〜40軸のM1011 h.264ストリームをMPEG-2(.m3u8および.tsファイル)として(再)エンコード/チャンク化することです。

質問1

VLCコマンドラインの「バッチ」ファイルを使用して1台のコンピューターをセットアップし、Axis Webサイトからの30〜40の入力ストリームを開始してMPEG-2にエンコードし、iPhoneに対応できるようにすることは可能ですか。その多くのウェブカメラを処理するための安定性、ハードウェア要件などについて疑問に思っています。この同じコンピューターにはHTTPサーバー(おそらくIIS)とパブリックIPアドレスがあるため、ローカルコンピューターよりも遠くにMPEG-2ファイルを取得する必要はありません。

質問2

MJPEGのみを提供する古いAxisモデル(205、206)の場合、VLCを使用してそれらをMPEG-2にエンコードすることもできますか?.h264をMPEG-2に(再)エンコードまたは再パッケージ化することは、MJPEGをMPEG-2にエンコードするよりもはるかに「作業」が少ないと思い込んでいますか、それともほぼ同じ量のCPUなどですか?最新バージョンのVideolanをインストールしましたが、RTSPURLを介してAxisM1011 .h264ストリームに接続するのは簡単だったので、多くのことが機能することを知っています。

質問#3

誰かが特定のVLCコマンドラインまたは構成を共有できますか?入力としてAxis M1011.h264および/またはAxisMJPEG、出力についてはMPEG-2(.m3u8および.tsファイル)"チャンク"特に3Gに接続した場合、AppleiPhoneで必要なサイズになります。

質問#4

最後に、誰かが別の提案されたアプローチ(別のエンコーダー、よりうまく機能するメディアサーバーなど)を持っている場合は、それらの提案も聞きたいと思います。

4

2 に答える 2

2

入力ストリームを受信するのに十分なネットワーク機能と、エンコードするのに十分な CPU パワーと RAM があれば、それは可能です。vlc または ffmpeg の複数のインスタンスに対して 1 台のマシンを使用する場合、固有の制限はありません。

30 ストリームの 512 kbps 入力をフィードするカメラがある場合、30x512 = 15 Mbps のネットワーク機能が必要です。これは、最新のマシンでは十分なはずです。

難しいのは、iPhone 出力用に 30 個のトランスコードを取得することです。出力は MPEG2 TS コンテナーですが、内部的には mpeg4 または h.264 でエンコードされたコンテンツが必要です。H.264 エンコーディングはコストがかかりますが、MPEG4 で同じ品質を得るために必要な送信帯域幅は少なくて済みます [概算で ~30% 削減]

320x240 を表示しても問題ないと仮定すると、mpeg4 でまともな品質を得るには、256 kbps 出力でまともな品質になるはずです。h.264 の場合は 192 kbps にできます [3GS 以下のベースライン]

問題は、トランスコーディングを実行する馬力があるかどうかです。確認方法はこちら

入力内容を表すビデオ ファイルを 1 つ取得します。入力フレームレートを確認してください。必要な出力にトランスコードします。エンコードのためにffmpegから取得しているfpsを確認してください。入力レートの倍数に注意してください。複数の同時ストリームを処理するには、5 ~ 10% を削除します。これは、マシンで得られる最大値です。

ffmpeg は、http または rtsp ソースから入力を受け取り、セグメント化された出力を作成できます。ffmpeg を使用してセグメントを作成する方法を理解するには、これを参照してください。私が推測する m3u8 ファイルを生成するには、まだ小さなプログラムを作成する必要があります。

ここでは些細なことではありませんが、お楽しみいただけます。それはできます。

EDIT:もう1つのことは、誰かがそれを見ているときにのみトランスコーディングが必要なことです。したがって、ある時点で誰かが 10 台のカメラを表示していない場合、それらのトランスコーディングを行う必要はありません。したがって、最初に、特定の時間に何台のカメラが表示されているかを統計的に調べる必要があります。あなたの歴史を見てください。次に、より強力でないマシンが必要になります。

編集:コマンドラインの代わりにプログラミングを処理できる場合は、次を参照してください:これ

于 2012-09-11T16:25:53.080 に答える
1

ffmpegはあなたにとって可能な代替手段かもしれません。コマンド ライン ベースのクロス プラットフォームであり、品質、フォーマット、およびストリームを制御できます。エンコード/再エンコードの品質は、基本的にアプリケーションの処理速度を制御し、ループからデータを取得するために必要なスループットを取得します。

于 2012-09-11T15:09:50.120 に答える