Ip Cameraからストリームを取得する方法、RTPを使用、ストリームはMPEG4、マルチキャストアドレスとポート、IPカメラのIPアドレスとポート番号を持っています。
また、たとえばhttp(http:// ip / jpeg)経由では到達できません。また、VLCPlayerでもストリームに到達できません。たとえば、(rtp:// ipadressofcam:port)と(rtp:// multicastaddress:port)
では、そのffmpegコマンドとは何ですか?
私はWindowsOSを持っていますが、現在はC#でのみコードを記述しています。
しかし、プロデューサーはカムの表示に使用する独自のocxを作成しました。そのプラグインは、.netで機能しますが、機能性があまりないため、使用したくありません。つまり、カムの現在の画像やスナップショットを取得できないため、自分でやる。
4 に答える
VLCはそのようなものに使用でき、.NETでも使用できるActiveXコントロールです。VLCMediaPlayerをインストールするだけで、VSツールボックスでコントロールを設定できます。
http://forum.videolan.org/viewtopic.php?f=32&t=54969
アップデート
このようなものにお金を払う準備ができている場合は、http://www.mainconcept.com/products/sdks/video.htmlこの会社の製品を使用して、巨大なライブラリを見つけることができるデコードとエンコードを進めることができます。
ストリームがパスワードで保護されていませんか?
カメラがVLCリクエストを拒否する理由を確認してください。これを行う方法は次のとおりです。Wiresharkをインストールして起動し、次のようにカメラアドレスのフィルターを設定します:ip.addr == camera_ip(xxxx.xxxx.xxxx.xxxx)。次に、VLCに接続して、交換されたメッセージを確認します。DROP、UNAUTH、またはpasswdを使用するように指示するものが表示された場合は、それを導入してください。(VLCは最初に認証されていない手順を使用して接続を試み、失敗した場合はパスワードを要求します。)
失敗の理由が何か違う場合、Wiresharkはあなたに手がかりを与えます。
また、VLCがアクセスできない場合、他の方法を見つける可能性はほとんどないことを覚えておいてください。あなたがビデオの第一人者でない限り。
それが役に立てば幸い!
したがって、カメラからビデオストリームを受信し、個々のフレームをJPEGファイルに変換する必要があります。これは良さそうに聞こえ、実際には自然に聞こえます。なぜですか?ネットワーク上で送信されているビデオフィードがあり、個々のフレームを選択するだけで、それほど多くは必要ありません。
元のストリームはMPEG-4(パート2)であり、必要なターゲットエンコーディングはJPEGです。これにより、タスクがMPEG-4ビデオフィードの取得、非圧縮画像へのデコード、およびJPEGへのエンコードの一部に分割されます。これらを最後から逆に見ていきましょう。
JPEGは一般的なエンコーディングであり、JPEGに圧縮できるさまざまなインターフェイスを備えたさまざまなコーデックがあります。オプションには、GDI + API、IJG JPEGライブラリlibjpeg、JPEGライブラリ、DirectShowおよびその他のインターフェイスを備えたビデオ用のコーデックが含まれます。
MPEG-4デコーダーは複雑なコンポーネントですが、幸いにも十分に標準化されており、さまざまなインターフェイスや複数のソースから入手できます。特に、MPEG-4 Part 2ビデオデコーダーは、Windows 7に同梱されていますDMO(また、Windows 7を介して出荷されます)。デコーダーは、ffdshow、IntelMediaSDKのDirectShowフィルターとしても利用できます。
最初のステップに戻ると、ネットワークからMPEG-4ストリームに到達する必要があります。まず最初に、カメラがマルチキャストUDPアドレスで使用可能であることを示しました。これにより、RTPデータの受信を開始するために、ソケットを開いてマルチキャストグループに入れることができます。受信するデータはまだ純粋なMPEG-4ではなく、MPEG-4オーディオ/ビジュアルストリームのRTPペイロード形式に従ってフォーマットされています。メッセージのRTPストリームを受信するときは、順不同のフラグメントを受信する準備をする必要があります。パケット損失など。受信できるものを受信し、RTPヘッダーを確認し、MPEG-4フィードの再構築に最善を尽くす必要があります。
最終的には、アプリケーションからこれらの手順をカバーし(必ずしも直接ではなく、他の回答で言及されているものを含むサードパーティのライブラリを使用することをお勧めします)、ネットワークからの受信とトランスコーディングをつなぎ合わせるパイプラインを構築する必要があります。
そのため、これまでVLCで開くことができませんでしたが、.sdpファイルを作成してffplayで再生すると、黒い画面しか表示されません。
vlc -vvv dshow:// --sout-keep --sout-all --sout=#rtp{dst=multicastaddress,port=portNo,sdp=file:///C:/test/my.sdp}
もちろん、これは純粋な解決策ではありませんが、少し希望があります。
しかし、絶対的な解決策はそのようなものになる可能性があります。
私が意図したことを達成するためにc#だけを使用する方法はありません。使用できるc++ライブラリコンポーネントはほとんどありませんが、Managed c ++と一緒に使用して、相互運用サービスを記述し、c#コードでそれらのdllを使用できます。必要なものは次のとおりです。
1-RTPライブラリhttp://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplibまたはlive555が必要ですが、live555には特定の制限があります。
2-RTPライブラリは、エンコーダからプルするMPEG4ストリームのトランスポートです。しかし、ストリームを制御する方法が必要です。それらはプロデューサーのWSDLで提供されます。
3-その後、デコーダーが必要です。Libavcodec、libavcodecを使用してIframeを.netのjpeg画像に変換できます。