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 にアクセスできます。基本的な手順は次のとおりです。
- ルーター構成インターフェイスに入り、割り当てられた外部ネットワーク IP アドレスを確認して、書き留めます。
- ポートマッピング構成インターフェイスに入ります。異なるルーターの場所は異なります。ポートマッピングなどの単語を探すか、仮想サーバーと呼ばれることがあります。
- 対応するポート マッピング情報を追加します。外部ポートはデバイスへの外部アクセス用のポートに対応し、内部ポートはデバイスにアクセスするための内部ネットワーク用のポートに対応します。
- デバイス検索側では、デバイスを指定して IP アドレスとポートを入力し、ユニキャスト検索ボタンをクリックすると、デバイスの onvif アドレスが自動的に検索されます。次に、onvif ユーザー情報を入力し、クリックしてすべて取得します。 、リターン情報がある場合は正常を意味します。
2. レンダリング
3. 体験アドレス
- 体験アドレス:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g抽出コード:01jf ファイル名:bin_video_system.
- 国内サイト: https: //gitee.com/feiyangqingyun
- 国際サイト: https://github.com/feiyangqingyun
- 個人ホームページ: https: //blog.csdn.net/feiyangqingyun
- 志湖ホームページ: https: //www.zhihu.com/people/feiyangqingyun/
- オンライン ドキュメント: 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)、ソフトウェアモジュール
- ビデオ監視モジュール、デバイス リスト、グラフィック アラーム情報、ウィンドウ情報、PTZ コントロール、プリセット位置、クルーズ設定、デバイス コントロール、フローティング マップ、Web ブラウジングなどを含むさまざまなドッキング小ウィンドウ サブモジュール
- ローカル再生、リモート再生、デバイス再生、写真再生、ビデオアップロードなどを含むビデオ再生モジュール。
- 写真地図、オンライン地図、オフライン地図、経路計画などを含む電子地図モジュール
- ローカル ログ、デバイス ログなどを含むログ クエリ モジュール。
- システム設定(基本設定、ビデオ パラメータ、データベース設定、マップ設定、シリアル ポート設定など)、ビデオ レコーダー管理、カメラ管理、ポーリング設定、録画計画、ユーザー管理などを含むシステム設定モジュール。
(2) 基本機能
- さまざまなビデオ ストリーム (rtsp、rtmp、http など)、ビデオ ファイル (mp4、rmvb、avi など)、ローカル USB カメラの再生をサポートします。
- 1、4、6、8、9、13、16、25、36、64 画面切り替えを含むマルチ画面切り替えをサポートします。
- 全画面切り替え、マウスの右ボタン メニュー、ツールバー ボタン、ショートカット キー (alt+全画面表示、esc 全画面終了) などのさまざまな切り替え方法をサポートします。
- 1、4、9、16 画面ポーリングを含むビデオ ポーリングをサポートし、ポーリング グループ (ポーリング プラン)、ポーリング間隔、コード ストリーム タイプなどを設定できます。
- デバイス検索、PTZ コントロール、プリセット位置、デバイス コントロール (画像パラメータ、校正時間、システムの再起動、スナップショット画像など) を含む onvif プロトコルをサポートします。
- 権限管理をサポートします。ログの削除、システムのシャットダウンなど、さまざまなユーザーがさまざまなモジュールの権限に対応できます。
- sqlite、mysql、sqlserver、postgresql、oracle、Renda Jincang など、さまざまなデータベースがサポートされています。
- ローカル USB カメラは、解像度やフレーム レートなどの設定パラメータをサポートしています。
- すべてのドッキング モジュールは、対応するメニューを自動的に生成して、表示と非表示を制御します。このメニューは、タイトル バーを右クリックしてポップアップできます。
- すべてのモジュールの表示、すべてのモジュールの非表示、通常のレイアウトのリセット、全画面レイアウトのリセットをサポートします。
- デバイスをダブルクリックすると、イメージ マップ、オンライン マップ、オフライン マップなどをサポートするリアルタイム プレビュー ビデオがポップアップ表示されます。
- カメラ ノードを対応するウィンドウにドラッグしてビデオを再生し、ローカル ファイルのドラッグをサポートして直接再生します。
- ビデオの削除は、マウスの右ボタンによる削除、サスペンド バーを閉じる削除、ビデオ モニタリング パネルの外側にドラッグして削除するなど、複数の方法をサポートしています。
- ピクチャーマップ上のデバイスボタンは自由にドラッグでき、位置情報は自動で保存されます。Baidu マップでは、マウスをクリックして緯度と経度の情報を取得できます。この情報は、デバイスの位置を更新するために使用されます。
- ビデオ モニタリング パネル ウィンドウ内の任意のチャネルは、ドラッグと切り替えをサポートし、即座に応答します。
- Baidu マップ、ビュー切り替え、移動軌跡、機器ポイント、緯度と経度を取得するためのマウス プレスなどをカプセル化します。
- ノードをダブルクリックする、ノードをドラッグする、ウィンドウをドラッグして位置を交換するなどの操作を行うと、前回の再生アドレスが自動的に更新および保存され、次回ソフトウェアを開いたときに自動的に適用されます。
- 右下隅の音量バー コントロールは、フォーカスを失って自動的に非表示になり、音量バーにはミュート アイコンが表示されます。
- ビデオのスクリーンショットをサポートします。単一またはすべてのチャンネルのスクリーンショットを指定できます。また、下部の小さなツールバーにスクリーンショット ボタンもあります。
- サポート残業自動的にマウス ポインター、自動フル スクリーン メカニズムを非表示にします。
- onvif PTZ コントロールをサポートし、リセットとフォーカス調整を含め、PTZ カメラを上下左右に移動できます。
- onvif プリセット位置をサポートし、プリセット位置を追加、削除、変更でき、開始位置を呼び出すことができます。
- 明るさ、コントラスト、彩度、シャープネスなどの onvif 画像パラメーター設定をサポートします。
- 画像キャプチャ、ネットワーク設定、時間調整、再起動、イベント サブスクリプションなど、onvif の他の操作をサポートします。
- Hikvision、Dahua、Uniview、Tiandiweiye、Huawei などを含むがこれらに限定されない、任意の onvif カメラをサポートします。
- ビデオは、オプションのタイミング ストレージまたは単一ファイル ストレージ、およびオプションのストレージ間隔で保存できます。
- 映像ストリームの通信モードtcp+udpを設定でき、映像のデコード速度優先、画質優先、バランスなどを設定できます。
- ソフトウェアの中国語名、英語名、ロゴアイコンなどを設定できます。
- 保存されたビデオ ファイルは、指定したディレクトリにエクスポートして、サーバーに一括アップロードできます。
- 完璧な録画プラン設定、30 分ごとに 7 回 24 時間、各チャンネルをサポートし、録画を保存するかどうかを設定します。
(3) 特徴的な機能
- メインインターフェースはドッキングフォームモードを採用し、さまざまなコンポーネントが小さなモジュールの形で追加され、任意のモジュールをカスタマイズできます。
- ドッキング モジュールはどこにでもドラッグして埋め込むことができ、フルスクリーンとマルチスクリーンの最大化をサポートします。
- デュアルレイアウトファイルストレージメカニズム、ノーマルモードとフルスクリーンモードは異なるレイアウトスキームに対応し、自動的に切り替えて保存します。たとえば、フルスクリーンモードでは複数のモジュールを強調表示し、指定された位置に透過的に表示できます。これはよりSF的ですそしてモダン。
- オリジナルの onvif プロトコル メカニズムは、基礎となるプロトコル分析 (udp ブロードキャスト検索 + http 要求実行コマンド) を採用しています。これは、軽量で理解しやすく、習得と拡張が容易であり、gsoap などのサードパーティ コンポーネントに依存していません。
- 元のデータのインポート、エクスポート、および印刷メカニズム、コンポーネントに依存しないクロスプラットフォーム、および即座にデータをエクスポートします。
- 複数の組み込みのオリジナル コンポーネント、データのインポートおよびエクスポート コンポーネント (xls、pdf、印刷へのエクスポート)、データベース コンポーネント (データベース管理スレッド、自動クリーニング データ スレッド、ユニバーサル ページング、データ要求など) を含む、宇宙での超価値、マップ コンポーネント、ビデオ監視コンポーネント、マルチスレッド ファイル送受信コンポーネント、onvif 通信コンポーネント、共通ブラウザ カーネル コンポーネントなど。
- カスタム情報ボックス+エラーボックス+お問い合わせボックス+右下のプロンプトボックス(複数フォーマット含む)など
- 精巧なスキニング、最大 17 セットのスキン スタイルを自由に変更可能、メニューなどを含むすべてのスタイルが統一されています。
- ビデオ コントロールのフローティング バーは、単独で複数のボタンを追加できます。監視インターフェイスの下部にある小さなツールバーも、単独でボタンを追加できます。
- カメラノードをダブルクリックしてビデオを自動的に再生し、ノードをダブルクリックしてビデオを順番に自動的に追加し、自動的に次のビデオにジャンプし、親ノードをダブルクリックしてノードの下にすべてのビデオを自動的に追加します。オプションのメイン ストリームとサブ ストリーム。
- ビデオ レコーダーの管理、カメラの管理、情報の追加、削除、変更、インポート、エクスポート、および印刷が可能で、新しいデバイス情報をすぐに適用して、再起動せずにツリー リストを生成します。
- さまざまなカーネルを選択して自由に切り替えることができ、ffmpeg、vlc、mpv などを pro で設定できます。最もクロスプラットフォームである ffmpeg を使用することをお勧めします。Linux および Mac プラットフォームでコンパイルされたライブラリがデフォルトで提供されます。
- ハードデコーディングをサポートし、ハードデコーディングタイプ (qsv、dxva2、d3d11va など) を設定できます。
- デフォルトでは、opengl がビデオの描画に使用され、CPU リソースの使用率が非常に低く、描画用に yuyv と nv12 の両方の形式をサポートしています。
- 高度にカスタマイズ可能で、ユーザーはカスタム モジュールの追加、動作モードの追加、ロボット監視、ドローン監視、掘削機監視など、これに基づいて独自の機能を簡単に派生させることができます。
- XP、Win7、Win10、Win11、Linux、Mac、各種国内システム(UOS、Winning Kirin、Galaxy Kirinなど)、組み込みLinuxなどのシステムに対応。
- コメントは完全で、プロジェクト構造は明確で、超詳細で完全なユーザー開発マニュアルは各コード ファイルの機能説明に正確であり、バージョンは継続的に繰り返されます。