2016-03-27 6 views
0

私はIPカメラからデータを取得して保存しようとしています。これを行うには、最善の方法についていくつかの高いアドバイスをいただきたいと思います。RTPストリームからファイルにビデオを保存する

これまでのところ、カメラとのRTSP会話を開始し、RTPペイロードを含むUDPパケットを送信しています。しかし、ここからどこに行くのかは分かりません。

私はこの作業を非常にうれしく思っています。私はプロジェクトの解体ができるように、いくつかの指針/手順の概要をお読みください。

+0

これは非常に広い質問です。実際にffmpegのようなフレームワークを使っていますか? –

+0

すごく広範にごめんなさい。私は、より具体的な質問をするのに十分なことは知らないと思います。私はフレームワークを使用していません。私はちょうどイーサネットを介して私のカメラを接続して、私は簡単なC/C + +のプログラムでRTPストリームを開始しています。 – SuddenMoustache

+0

私はπάνταῥεwithに同意する必要があります。これに答えるにはあまりにも多くのアプローチがあります。サードパーティのAPIまたはライブラリを使用していますか?自分のフレームワークを使用していますか?一般的に言えば、サーバー側からデータパケットを受け取ったら、データを解析するか、パケットを標準で必要とされる何らかのタイプのデータ構造に解釈するか、独自の設計によって保存します構造体またはクラスインスタンスのいずれかであり、そこからアプリケーションが使用するファイル構造にとって重要なビットを保存するか書き込むかが問題になります。 –

答えて

2

OPの質問に対する直接的な回答はありませんが、彼の質問は少し広範であり、OPがその情報を使って何をしようとしているかに関する詳細情報がなく、正確な回答を与えることは困難です。私がここでできることは、おそらく取られたOPステップと考慮すべき問題を提案することです。

OPは述べていました:

をこれまでのところ、私はカメラでRTSP会話を正常に開始しました、それは私のRTPペイロードとUDPパケットを送信しています。しかし、ここからどこに行くのかは分かりません。

カメラとの通信が確立されており、ビデオストリームを介してデータパケットを受信できるようになったので、RTPペイロードが何であるか、そのデータをどのように解釈するのかが分かりました。ですから、この時点で、ネットワークプロトコルの一種と思われるRTPプロトコルに関する研究を行う必要があります。このプロトコルでうまく機能するように構造と関数を書いたら、UPDパケットを有用なバイトの情報に分割します。通常、ファイルやストリームオブジェクトのいずれかからグラフィック、ビデオ、またはオーディオデータのいずれかを処理する場合には、通常、いくつかのタイプのヘッダー情報が付随します。次に、このヘッダー情報を理解することは、このファイルまたはストリームが保持するコンテンツのタイプに関する情報を提供する構造の形式では正常なので、そこから抽出する情報のバイト数を知ることができます。

私は、ファイルに直接RTPペイロードを保存するケースではないことは知っていますが、他にどのような手順がありますか?

この手順は、必要に応じて、また情報で何を行うかによって異なる場合があります。ビデオコンテンツに関するプロパティまたは一般情報をファイルに書き込もうとしていますか:その圧縮タイプ、そのオーディオ - ビデオコーデックタイプ、解像度とフレームレート情報、バイトレートなど?または、実際のビデオコンテンツ自体を、アプリケーションが再生または編集目的で使用するファイルに書き込もうとしていますか?これは皆あなたの意図にかかっています。

データは圧縮されていますか?その場合は圧縮解除する必要がありますか?この時点で

あなたが成功したRTPプロトコルを解釈することができて、そのヘッダ情報を理解し、適切な構造にそれを保存することにより、データパケットを解析された後、それはその後、決定するためにそのヘッダ情報を使用しての問題です実際にそのストリームオブジェクト内にあるものたとえば、Video Compressionを提供したVideo Cameraのプロパティに関するPDFによれば、H.264またはMJPEGを使用する場合は、ヘッダーに記載されている情報によって決定する必要があります。ここからコードを分岐し、各タイプの圧縮を読み込んで解析したり、他の人と一緒に仕事をしたり無視したりする。オーディオについて心配していて、AAC(エンコーディングのみ)、G.711 A-Law、& G.711 U-Lawなどがあり、同じメカニズムが適用される場合は、次にオーディオ圧縮があります。一度オーディオとビデオの圧縮を超えることができたら、ヘッダ情報からどの解像度やフレームレート(バッファサイズ)を保存したかなど、ビデオ情報自体に関する重要な情報が必要になるので、読み込むバイト数を知ることができますストリームと、ストリームを介してポインタをどのくらい移動させるかを指定します。 30 fpsの@

  • H.26
    • 1920×180(2.1MP)(1080:あなたは解像度とフレームレートに気付いた場合に使用されている圧縮の各タイプから利用可能な異なる可能な形式があります60のFPS(720)*
    • 720×576分の480 @ 30/25 FPS @)
    • 1280×720 30/20 FPS(4CIF)
    • 352 @(D1)
    • 704 X 576分の480 x 240/288 @ 30/25 fps(CIF)
  • MJPEG
    • 720×576分の480 30/25 FPS(D1)30/25 FPS(4CIF)
    • 352×288分の240 @
    • 740 X 578分の480 @ 30/25 FPS(CIF)

は今、これは解像度&フレームレートのためであるが、考慮すべき次のことは、あなたがVで作業している ですビデオストリームのビデオストリーム機能に関するプロパティに応じて、上記の内容が適用されない場合があります。

  • シングルストリームH.264最大30 fpsの
  • デュアルストリームのH.264とMJPEG
    • 264 @ 1080(1920×1080)へ:プライマリストリームプログラマブル最大1280×720
    • FPS 25/20 @ MJPEG:720 x 576 @ 25/20 fpsまでプログラム可能なセカンダリストリーム

あなたのビデオカメラで使用できるこれらの異なるタイプを使用すると、これらをすべて考慮する必要があります。今これはアプリケーションの意図と情報で何をするつもりかによって異なります。これらのすべてのタイプを受け入れるようにプログラムを書くことも、そのタイプの特定のフォーマットを持つ1つのタイプだけを受け入れるようにプログラムすることもできます。これはあなた次第です。

その他の変更は必要ですか?

あなたの実際のアプリケーション内の意図がビデオオーディオ情報自体を変更するものでなければ、あなたは何もする必要はありません。アプリケーション内の意図が簡単な再生のためにファイルを読み取るだけであれば、適切な情報がすべて適切に保存され、カスタムファイル構造を読み込むためのファイルパーサがファイルの内容を読み込める限り、答えは不要です。一般的な再生のために適切にデータを解析することができます。

このカメラの具体的な内容は、どこで知ることができますか?

私は、あなた自身の質問に含まれているPDFが、あなたに十分な情報を与えてくれているので、カメラ自体についてもっと詳しい情報は必要ありません。ここから必要となるのは、特定のプロトコル、パケットタイプ、圧縮&ストリームタイプについての情報とドキュメントです。これらのタイプの一般的な検索で十分です。 UDP

  • は、C++ LinuxまたはWinsockのいずれかのためにUDPソケットをプログラミングするためのGoogle検索を行います。

RTP

  • C++プログラミングのRTPパケットのGoogle検索

ビデオ圧縮

  • 両方H.26 &用ゴーグル検索を行うのですかMJPEG圧縮ストリームオブジェクトに関する構造情報

オーディオ圧縮

  • はAACのそれぞれについて、Google検索を行います(エンコーディングのみ)、G.711 A-法、G.711 U-法則あなたは、オーディオなどに興味がある場合よく

ストリームオブジェクトとしてこれらのデータ構造の有効な仕様があり、このビデオコンテンツがどのタイプとフォーマットで保存されているかを判断するために適切なヘッダー情報が必要な場合は、簡単に解析できます。適切なデータパケット。ここでそれらを保存する方法やファイルに書き込む方法は、すべてあなたの意図に依存します。

私は化学者、物理学者、科学者、エンジニアが典型的な問題に近づくのと同様の方法で正しい方向に導くためのガイドラインとしてこれを提供しました。

一般的な手順は、現在の問題に関する科学的アプローチに従うことです。これらは、典型的には、以下のとおりです。

  • 状況を評価

    • は、仮説や状況についての論文のいずれかを作成します。
    • は既知の事実
    • を収集未知
    • ドラフトに既知および未知の関係を示したモデルを決定します。
    • 研究と実験の両方
    • 録音を実行したり、ログイベントおよびデータ
    • ソフトウェアアプリケーションを書き込む場合には今すぐ結論

    を描画データ

  • を分析概念は似ていますが、アプローチ上記のステップのすべてが必要とされるわけではなく、いくつかの追加のステップが必要とされる可能性があるため、異なるものであっても変化してもよい。科学的アプローチにはないアプリケーション開発サイクルの1つのステップは、アプリケーションのデバッグプロセスです。しかし、一般的なガイドラインはまだ適用されます。あなたがこのタイプの戦略を守ることができれば、私はあなたが必要とするものを集めることに自信を持って、目標を達成するためのステップバイステップのプロセスからそれをどのように使用することができると確信しています。

  • +0

    これは素晴らしい返信です。あなたが書き留めた時間を本当に感謝しています。ありがとう、フランシス。 – SuddenMoustache

    +0

    @SuddenMoustache私はできる限り手伝っています。私はC + +で教え​​ている経験から知っています。プログラミングの焦点は、3Dグラフィックス開発と3Dゲームエンジンの設計です。私は実際に私に言語を教える人がいなかったので、自分でそれを学ばなければなりませんでした。そして、90年代後半に2000年代初めに学習を始めたとき、チュートリアルのインターネットウェブサイトの大半はテキストサイトでした。あなたがすでに知っていると仮定したかのようなものです。時間が経つにつれ、インターネットは改善しました... –

    +0

    @SuddenMoustache(...続き)ストリーミングビデオが出てきて、より良いチュートリアルを学びました。言語そのもの私は、試行錯誤、非常に少ない手助けで多くの検索と読書を通して難しい方法を学びました。さまざまな方法論、ベストプラクティスを学び、このような時間とコミュニティの改善の両方をもたらした開発モデルの作成については、http://www.MarekKnows.comでOpenGLを学んだが、私はDirect Xをいくつか学んだが、私はそれがhttp:www.rastertek.comであることがわかりました。 –

    2

    私はCisco IPCカメラからデータを取得して保存しようとしています。これを行う最善の方法について、いくつかの高いアドバイスをいただきたいと思います。

    おそらくopenRTSPを使用することができます。output to fileでも可能です。この方法では、NOコードを書かなければなりません。 RTP、RTSP、RTCPを正しく実装することは複雑で多くの作業が必要です。 openRTSPが満たさないという要件がある場合は、live555ライブラリをRTSP/RTP/RTCPに使用し、受信したビデオで何かをするための最小限のコードを書くことができます。メーリングリストは、あなたが「良い」質問をし、FAQを最初に読んでいることを確認したら、非常に反応的です。

    私は、ファイルに直接RTPペイロードを保存するケースではないことは知っていますが、他にどのような手順がありますか?

    openRTSPを使用する場合、このことを知る必要はありません。 live555ライブラリを直接使用すると、ビデオフレーム全体を渡すことができます。これを実現するには、デコードして書き込む必要があります。 DOにRTPとRTPのペイロードフォーマットが必要な場合、または対応したい場合は、対応するRFCを読んでください。 RFC2326,RFC3550,RFC6184

    データは圧縮されていますか?その場合は圧縮解除する必要がありますか?

    通常、圧縮メディアをファイルに保存し、再生時にメディアプレーヤーソフトウェアを使用してデコードします(そうしないと、巨大なファイルになります)。

    このカメラの具体的な内容は、どこで知ることができますか?

    ビデオを保存したいだけの方は、それが実装している標準(既に行っているもの)以外に、カメラについて何も知る必要はありません。

    関連する問題