Qt 書き込みビデオ監視システム 71-カメラやその他の機器への外部ネットワーク アクセス (さまざまな情報の取得とストリームのプル)

I.はじめに

最近の要件は、外部ネットワークを介してカメラまたは NVR にアクセスすることです. 一般的な方法は、ビデオ ストリームをサーバーにプッシュし、次に rtmp ビデオ ストリームをプルすることです. これには、より多くのサーバー要件が必要であり、実現される機能は限られています。 onvif プロトコルを使用してデバイスの情報と構成情報を取得する. 別の方法として、デバイスをルーター ポート経由で外部ネットワークに直接マッピングし、対応する IP アドレスと外部ネットワークのポートを入力する方法があります。 . 機器メーカーは現在、セキュリティに関してほぼ良い仕事をしているため、セキュリティの問題は考慮しません. ログインと onvif のやり取りにはユーザー認証が必要であり、https メカニズムも有効にすることができます.

ポート マッピング後、Web ページを開いてログインするなど、外部ネットワークは実際にデバイスに正常にアクセスできますが、onvif メッセージのやり取りによっては正しくない可能性があり、コードを調整する必要があります.たとえば、取得したビデオ ストリームアドレスは rtsp://192.168.0.5:554/ です。 1. ポート マッピングのため、onvif インタラクションの IP アドレスとポートをマッピングされたアドレスとポートに置き換える必要があります。それ自体は、あなたがポートマッピングを行ったことを知りません。彼は、パッケージ化されて送信された彼自身の情報にのみ応答します。そのため、onvif コードの対応するアドレスを置き換える必要があります。もちろん、onvif アドレスの IP アドレスを取得するだけです。複数のデバイスがある場合はルーターを通過するなど、微調整が必​​要な場合があります ポートは制限されており、554 ポートは 1 つのデバイスの 554 ポートにのみマッピングでき、他のデバイスは他のポートに変更する必要があります。取得したアドレスの後にポートを手動で変更する必要があります。

外部ネットワーク カメラ デバイスと対話する onvif メカニズムを通じて、内部ネットワークと比較して、実現できないものは 1 つだけです。つまり、ブロードキャスト検索デバイスです。結局のところ、インターネット上には何千ものデバイスがあり、数十億の計算があります。これが達成できないことを除いて、画像パラメーターの設定 (明るさ、彩度、コントラスト、シャープネス)、PTZ コントロール、およびプリセット位置関連の操作を含め、他のすべては正常です。デバイスをブロードキャストして検索することはできないため、詳細なデバイス情報を取得するには、外部ネットワーク上のデバイスを1つずつユニキャスト検索する必要があります.このシステムのパッケージ化されたonvifコンポーネントは、IPアドレスを入力するだけでユニキャスト検索をサポートします.とポート。

ポート マッピング、外部ネットワークなどを介してカメラまたは NVR にアクセスできます。基本的な手順は次のとおりです。

  1. ルーター構成インターフェイスに入り、割り当てられた外部ネットワーク IP アドレスを確認して、書き留めます。
  2. ポートマッピング構成インターフェイスに入ります。異なるルーターの場所は異なります。ポートマッピングなどの単語を探すか、仮想サーバーと呼ばれることがあります。
  3. 対応するポート マッピング情報を追加します。外部ポートはデバイスへの外部アクセス用のポートに対応し、内部ポートはデバイスにアクセスするための内部ネットワーク用のポートに対応します。
  4. デバイス検索側では、デバイスを指定して IP アドレスとポートを入力し、ユニキャスト検索ボタンをクリックすると、デバイスの onvif アドレスが自動的に検索されます。次に、onvif ユーザー情報を入力し、クリックしてすべて取得します。 、リターン情報がある場合は正常を意味します。

2. レンダリング

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

3. 体験アドレス

  1. 体験アドレス:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g抽出コード:01jf ファイル名:bin_video_system.
  2. 国内サイト: https: //gitee.com/feiyangqingyun
  3. 国際サイト: https://github.com/feiyangqingyun
  4. 個人ホームページ: https: //blog.csdn.net/feiyangqingyun
  5. 志湖ホームページ: https: //www.zhihu.com/people/feiyangqingyun/
  6. オンライン ドキュメント: https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/

4. 関連コード

void OnvifQuery::checkAddr(const QString &ipport, QString &addr, bool checkOnvif, bool replacePort)
{
    
    
    QStringList list = addr.split("/");
    if (addr.isEmpty() || list.count() <= 3) {
    
    
        return;
    }

    //将内网的地址换成外网的(新增设备映射到外网后返回的数据中内网地址转换成外网的)
    if (replacePort) {
    
    
        list[2] = ipport;
    } else {
    
    
        //只替换IP地址
        list[2] = ipport.split(":").first();
    }

    //将地址补全字符串(测试发现天地伟业的摄像机返回的地址都是没有带onvif字样的需要补上才行)
    //http://192.168.0.160:80/Media 要转成 http://192.168.0.160:80/onvif/Media
    if (checkOnvif && !addr.contains("/onvif/")) {
    
    
        list.insert(3, "onvif");
    }

    addr = list.join("/");
}

OnvifHttpAddr OnvifQuery::getServices(const QString &ipport)
{
    
    
    //<tds:Namespace>http://www.onvif.org/ver10/media/wsdl</tds:Namespace>
    //<tds:XAddr>http://192.168.0.160:80/Media</tds:XAddr>
    //<tds:Namespace>http://www.onvif.org/ver20/ptz/wsdl</tds:Namespace>
    //<tds:XAddr>http://192.168.0.160:80/PTZ</tds:XAddr>

    OnvifHttpAddr httpAddr;

    //取出来时刚好按照顺序一一对应
    QDomNodeList nodeNamespace = doc.elementsByTagName(QString("%1:Namespace").arg(wsdlAddr.wsdlDevice));
    QDomNodeList nodeXAddr = doc.elementsByTagName(QString("%1:XAddr").arg(wsdlAddr.wsdlDevice));
    int size1 = nodeNamespace.size();
    int size2 = nodeXAddr.size();
    if (size1 == size2) {
    
    
        for (int i = 0; i < size1; ++i) {
    
    
            QString name = nodeNamespace.at(i).toElement().text();
            QString addr = nodeXAddr.at(i).toElement().text();
            this->checkAddr(ipport, addr, true, true);

            //可以自行增加其他的
            if (name == "http://www.onvif.org/ver10/device/wsdl") {
    
    
                httpAddr.addrDevice = addr;
            } else if (name == "http://www.onvif.org/ver10/media/wsdl") {
    
    
                httpAddr.addrMedia = addr;
            } else if (name == "http://www.onvif.org/ver20/media/wsdl") {
    
    
                httpAddr.addrMedia2 = addr;
            } else if (name == "http://www.onvif.org/ver20/ptz/wsdl") {
    
    
                httpAddr.addrPtz = addr;
            } else if (name == "http://www.onvif.org/ver20/imaging/wsdl") {
    
    
                httpAddr.addrImaging = addr;
            } else if (name == "http://www.onvif.org/ver10/events/wsdl") {
    
    
                httpAddr.addrEvents = addr;
            } else if (name == "http://www.onvif.org/ver20/analytics/wsdl") {
    
    
                httpAddr.addrAnalytics = addr;
            }
        }
    }

    return httpAddr;
}

5. 特徴

(1)、ソフトウェアモジュール

  1. ビデオ監視モジュール、デバイス リスト、グラフィック アラーム情報、ウィンドウ情報、PTZ コントロール、プリセット位置、クルーズ設定、デバイス コントロール、フローティング マップ、Web ブラウジングなどを含むさまざまなドッキング小ウィンドウ サブモジュール
  2. ローカル再生、リモート再生、デバイス再生、写真再生、ビデオアップロードなどを含むビデオ再生モジュール。
  3. 写真地図、オンライン地図、オフライン地図、経路計画などを含む電子地図モジュール
  4. ローカル ログ、デバイス ログなどを含むログ クエリ モジュール。
  5. システム設定(基本設定、ビデオ パラメータ、データベース設定、マップ設定、シリアル ポート設定など)、ビデオ レコーダー管理、カメラ管理、ポーリング設定、録画計画、ユーザー管理などを含むシステム設定モジュール。

(2) 基本機能

  1. さまざまなビデオ ストリーム (rtsp、rtmp、http など)、ビデオ ファイル (mp4、rmvb、avi など)、ローカル USB カメラの再生をサポートします。
  2. 1、4、6、8、9、13、16、25、36、64 画面切り替えを含むマルチ画面切り替えをサポートします。
  3. 全画面切り替え、マウスの右ボタン メニュー、ツールバー ボタン、ショートカット キー (alt+全画面表示、esc 全画面終了) などのさまざまな切り替え方法をサポートします。
  4. 1、4、9、16 画面ポーリングを含むビデオ ポーリングをサポートし、ポーリング グループ (ポーリング プラン)、ポーリング間隔、コード ストリーム タイプなどを設定できます。
  5. デバイス検索、PTZ コントロール、プリセット位置、デバイス コントロール (画像パラメータ、校正時間、システムの再起動、スナップショット画像など) を含む onvif プロトコルをサポートします。
  6. 権限管理をサポートします。ログの削除、システムのシャットダウンなど、さまざまなユーザーがさまざまなモジュールの権限に対応できます。
  7. sqlite、mysql、sqlserver、postgresql、oracle、Renda Jincang など、さまざまなデータベースがサポートされています。
  8. ローカル USB カメラは、解像度やフレーム レートなどの設定パラメータをサポートしています。
  9. すべてのドッキング モジュールは、対応するメニューを自動的に生成して、表示と非表示を制御します。このメニューは、タイトル バーを右クリックしてポップアップできます。
  10. すべてのモジュールの表示、すべてのモジュールの非表示、通常のレイアウトのリセット、全画面レイアウトのリセットをサポートします。
  11. デバイスをダブルクリックすると、イメージ マップ、オンライン マップ、オフライン マップなどをサポートするリアルタイム プレビュー ビデオがポップアップ表示されます。
  12. カメラ ノードを対応するウィンドウにドラッグしてビデオを再生し、ローカル ファイルのドラッグをサポートして直接再生します。
  13. ビデオの削除は、マウスの右ボタンによる削除、サスペンド バーを閉じる削除、ビデオ モニタリング パネルの外側にドラッグして削除するなど、複数の方法をサポートしています。
  14. ピクチャーマップ上のデバイスボタンは自由にドラッグでき、位置情報は自動で保存されます。Baidu マップでは、マウスをクリックして緯度と経度の情報を取得できます。この情報は、デバイスの位置を更新するために使用されます。
  15. ビデオ モニタリング パネル ウィンドウ内の任意のチャネルは、ドラッグと切り替えをサポートし、即座に応答します。
  16. Baidu マップ、ビュー切り替え、移動軌跡、機器ポイント、緯度と経度を取得するためのマウス プレスなどをカプセル化します。
  17. ノードをダブルクリックする、ノードをドラッグする、ウィンドウをドラッグして位置を交換するなどの操作を行うと、前回の再生アドレスが自動的に更新および保存され、次回ソフトウェアを開いたときに自動的に適用されます。
  18. 右下隅の音量バー コントロールは、フォーカスを失って自動的に非表示になり、音量バーにはミュート アイコンが表示されます。
  19. ビデオのスクリーンショットをサポートします。単一またはすべてのチャンネルのスクリーンショットを指定できます。また、下部の小さなツールバーにスクリーンショット ボタンもあります。
  20. サポート残業自動的にマウス ポインター、自動フル スクリーン メカニズムを非表示にします。
  21. onvif PTZ コントロールをサポートし、リセットとフォーカス調整を含め、PTZ カメラを上下左右に移動できます。
  22. onvif プリセット位置をサポートし、プリセット位置を追加、削除、変更でき、開始位置を呼び出すことができます。
  23. 明るさ、コントラスト、彩度、シャープネスなどの onvif 画像パラメーター設定をサポートします。
  24. 画像キャプチャ、ネットワーク設定、時間調整、再起動、イベント サブスクリプションなど、onvif の他の操作をサポートします。
  25. Hikvision、Dahua、Uniview、Tiandiweiye、Huawei などを含むがこれらに限定されない、任意の onvif カメラをサポートします。
  26. ビデオは、オプションのタイミング ストレージまたは単一ファイル ストレージ、およびオプションのストレージ間隔で保存できます。
  27. 映像ストリームの通信モードtcp+udpを設定でき、映像のデコード速度優先、画質優先、バランスなどを設定できます。
  28. ソフトウェアの中国語名、英語名、ロゴアイコンなどを設定できます。
  29. 保存されたビデオ ファイルは、指定したディレクトリにエクスポートして、サーバーに一括アップロードできます。
  30. 完璧な録画プラン設定、30 分ごとに 7 回 24 時間、各チャンネルをサポートし、録画を保存するかどうかを設定します。

(3) 特徴的な機能

  1. メインインターフェースはドッキングフォームモードを採用し、さまざまなコンポーネントが小さなモジュールの形で追加され、任意のモジュールをカスタマイズできます。
  2. ドッキング モジュールはどこにでもドラッグして埋め込むことができ、フルスクリーンとマルチスクリーンの最大化をサポートします。
  3. デュアルレイアウトファイルストレージメカニズム、ノーマルモードとフルスクリーンモードは異なるレイアウトスキームに対応し、自動的に切り替えて保存します。たとえば、フルスクリーンモードでは複数のモジュールを強調表示し、指定された位置に透過的に表示できます。これはよりSF的ですそしてモダン。
  4. オリジナルの onvif プロトコル メカニズムは、基礎となるプロトコル分析 (udp ブロードキャスト検索 + http 要求実行コマンド) を採用しています。これは、軽量で理解しやすく、習得と拡張が容易であり、gsoap などのサードパーティ コンポーネントに依存していません。
  5. 元のデータのインポート、エクスポート、および印刷メカニズム、コンポーネントに依存しないクロスプラットフォーム、および即座にデータをエクスポートします。
  6. 複数の組み込みのオリジナル コンポーネント、データのインポートおよびエクスポート コンポーネント (xls、pdf、印刷へのエクスポート)、データベース コンポーネント (データベース管理スレッド、自動クリーニング データ スレッド、ユニバーサル ページング、データ要求など) を含む、宇宙での超価値、マップ コンポーネント、ビデオ監視コンポーネント、マルチスレッド ファイル送受信コンポーネント、onvif 通信コンポーネント、共通ブラウザ カーネル コンポーネントなど。
  7. カスタム情報ボックス+エラーボックス+お問い合わせボックス+右下のプロンプトボックス(複数フォーマット含む)など
  8. 精巧なスキニング、最大 17 セットのスキン スタイルを自由に変更可能、メニューなどを含むすべてのスタイルが統一されています。
  9. ビデオ コントロールのフローティング バーは、単独で複数のボタンを追加できます。監視インターフェイスの下部にある小さなツールバーも、単独でボタンを追加できます。
  10. カメラノードをダブルクリックしてビデオを自動的に再生し、ノードをダブルクリックしてビデオを順番に自動的に追加し、自動的に次のビデオにジャンプし、親ノードをダブルクリックしてノードの下にすべてのビデオを自動的に追加します。オプションのメイン ストリームとサブ ストリーム。
  11. ビデオ レコーダーの管理、カメラの管理、情報の追加、削除、変更、インポート、エクスポート、および印刷が可能で、新しいデバイス情報をすぐに適用して、再起動せずにツリー リストを生成します。
  12. さまざまなカーネルを選択して自由に切り替えることができ、ffmpeg、vlc、mpv などを pro で設定できます。最もクロスプラットフォームである ffmpeg を使用することをお勧めします。Linux および Mac プラットフォームでコンパイルされたライブラリがデフォルトで提供されます。
  13. ハードデコーディングをサポートし、ハードデコーディングタイプ (qsv、dxva2、d3d11va など) を設定できます。
  14. デフォルトでは、opengl がビデオの描画に使用され、CPU リソースの使用率が非常に低く、描画用に yuyv と nv12 の両方の形式をサポートしています。
  15. 高度にカスタマイズ可能で、ユーザーはカスタム モジュールの追加、動作モードの追加、ロボット監視、ドローン監視、掘削機監視など、これに基づいて独自の機能を簡単に派生させることができます。
  16. XP、Win7、Win10、Win11、Linux、Mac、各種国内システム(UOS、Winning Kirin、Galaxy Kirinなど)、組み込みLinuxなどのシステムに対応。
  17. コメントは完全で、プロジェクト構造は明確で、超詳細で完全なユーザー開発マニュアルは各コード ファイルの機能説明に正確であり、バージョンは継続的に繰り返されます。

おすすめ

転載: blog.csdn.net/feiyangqingyun/article/details/129063094