ビデオ再生の管理
再生のコントロールは RTSP 規格および ONVIF ストリーミング仕様(https://www.onvif.org/profiles/specifications/)に準じます。
録画サマリー
GetRecordingSummaryコマンドを使用することで、デバイスの録画したビデオの概要を取得することができます。これは必要用件ではありませんが、検索を実行するに先立って有益な情報を提供してくれます。
最初または最後の録画のタイムスタンプを取得するためにGetRecordingSummaryやGetMediaAttributesを使用できます。ただし、まずMilestone Open Network BridgeのXProtect Management Clientプラグインで [カメラ構成を使用する] 設定を有効に設定する必要があります。
GetServicesから戻ってきたサービスエンドポイントを使用すると、RecordingSearchサービスのためのプロキシを作成することができます。リクエストとリスポンス対象を作成し、 GetRecordingSummaryを呼び出します。
SearchBindingProxy searchProxy( &soapSearch );
std::string searchEndpoint = "http://" + host + "/onvif/recording_search_service";
_tse__GetRecordingSummary tse__GetRecordingSummary;
_tse__GetRecordingSummaryResponse tse__GetRecordingSummaryResponse;
result = searchProxy.GetRecordingSummary( searchEndpoint.c_str(), NULL,
&tse__GetRecordingSummary, &tse__GetRecordingSummaryResponse );
録画のためのサーチ
サーチサービスメソッドであるFindRecordingsはカメラで非同期のサーチを開始します。FindRecordingsはサーチ結果を参照する最小単位を戻します。仮に、1つしか録画可能なものがない場合でも、サーチはその録画のリファレンスを得るための適切な方法です。
以下のマンダトリパラメータとともに、FindRecordingsリクエストを送ります:
SearchScope>IncludedSources>Token–カメラにGUID最小単位を提供する必要があります。SearchScope>RecordingInformationFilter– 以下のパラメータと紐づいています:timestamp(UTCフォーマット)maxTimeBefore(ミリセカンド単位。リクエストされたtimestampの前の時間)maxCountBefore(リクエストされたtimestampeの前の最大トラック数)maxTimeAfter(ミリセカンド単位。リクエストされたtimestampの後の時間)maxCountAfter(リクエストされたtimestampeの後の最大トラック数)
例:
boolean(//Track[TrackType = “Video”]),2016-12-06T08:07:43Z,99999999,20,99999999,20
検索条件ごとに固有であるSearchTokenとともに、レスポンスを取得できます。
SearchToken からGetRecordingSearchResults に渡すと、検索条件に一致するすべてのトラックのリストを取得できます。
再生を開始する
ビデオ再生を閲覧するとき、デフォルトのスピードは1です(通常の再生は順方向です)。
再生は RTSP PLAY 手法により主導されます。レンジは指定可能です。レンジが指定されていない場合、ストリームは始めから終わりまで再生されます。あるいは、ストリームが一時停止された場合には、一時停止された箇所から再開します。本例で、Range: npt=3-20は、RTSP サーバーに 3 秒から 20 秒まで再生を開始するように指示します。
例:
PLAY rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373 RTSP/1.0
CSeq: 123
Session: 12345678
Require: onvif-replay
Range: npt=3-20
Rate-Control: no
逆再生
ONVIF デバイスは逆再生をサポートすることがあります。逆再生は負の値のあるスケールヘッダーを使用して表示されます。例えば、データのロスなく逆再生をする場合、–1.0が値として使われます。
Milestone Open Network Bridgeは [-32をサポートしています:32]。
PLAY rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373 RTSP/1.0
CSeq: 123
Session: 12345678
Require: onvif-replay
Range: clock=20090615T114900.440Z
Rate-Control: no
Scale: -1.0
スピードの変更
スピードは RTSP Rate-Controlヘッダーによりコントロールされます。「Rate-Control=yes」の場合、サーバーが再生スピードをコントロールしています。ストリームは標準のRTPタイミングメカニズムを用いて、リアルタイムで配信されます。「Rate-Control=no」の場合、クライアントが再生スピードをコントロールしています。Rate-controlled のリプレイは、往々にして特定の ONVIF が指定されていないクライアントによって使用されています。なぜなら、「Rate-Control=no」を指定しないからです。
クライアントで再生のスピードをコントロールする場合、提供されたコントローラーを用います。例えば、VLCメディアプレイヤーにおいては、 再生 >スピード>速くあるいは 遅くを選択します。0.5スピードを速める、あるいは遅くする。
Faster FineそしてSlower Fineはスピードを0.25の単位で変更します。
コマンドラインエントリで、VLCメディアプレイヤーの再生を管理する
コマンドラインを使うことで、VLCメディアプレイヤーでのビデオの再生を管理することができます。詳細はVLCコマンドラインヘルプ(https://wiki.videolan.org/VLC_command-line_help/)をご参照ください。
これらのコマンドは、例えば逆再生や、再生の開始場所の変更といったことを可能にします。
よく使われるコマンドラインの例:
>vlc.exe --rate=-1.0 --start-time=3600 "rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373"
場所:
- 速度はスケールおよびスピードパラメータ
- 開始時間は、データベースが開始する数秒後
以下は、VLCメディアプレイヤーの再生コントロールです:
コード | 目的 | 値 | 使用 |
|---|---|---|---|
| input-repeat= | インプットの重複 | <integer [-2147483648 .. 2147483647]> | 同じ入力が繰り返される回数。 |
start-time= | 開始時間 | <float> | ストリームは、この地点で開始されます(数秒後に)。 |
stop-time= | 終了時間 | <float> | ストリームは、この地点で終了します(数秒後に)。 |
run-time= | ランタイム | <float> | ストリームはこの期間実行されます(数秒後に)。 |
input-fast-seek no-input-fast-seek | ファーストシーク(デフォルトでは無効) | シークしている間、正確さよりスピードを選ぶ。 | |
rate= | 再生速度 | <float> | これは再生スピードを定義します(標準スピードは 1.0 です)。 |
input-list= | インプットリスト | <string> | コンマで区切られた入力のリストを与えることができます。これらの入力のリストは、通常の入力の後に連結されます。 |
input-slave= | インプットスレイブ(実験的) | <string> | これにより、複数のインプットを同時に操作することができます。これは実験的な機能であり、すべてのフォーマットがサポートされているわけではありません。インプットのリストは、#を使って区切ってください。 |
特定の時間範囲から録画を取得
特定の時刻のビデオ再生をリクエストするには、RTSP リンクのオプション URL パラメータ clock を使用します。
フォーマット:rtsp://[hostname]:[port]/vod/[camera_guid]?clock=[start_time]-[end_time]Z。
[start_time] および [end_time] のプロパティは、通常 yyyyMMddTHHmmssZ 形式(年、月、日、固定文字 T、24 時間制の時、分、秒、固定文字 Z)に従います。
end_time プロパティはオプションです。開始時間のみを指定する場合は次のフォーマットにします:rtsp://[hostname]:[port]/vod/[camera_guid]?clock=[start_time]-。例えば、rtsp://onbhost:554/vod/3bf3b583-768a-43c7-ae74-38df708c4dbf?clock=20250830T140000Z- は 2025 年 8 月 30 日 14:00 UTC に開始するストリームを取得します。
固定文字 Z は UTC タイムゾーンを示します。省略しても(非推奨)デフォルトで UTC として扱われます。タイムゾーンを指定する場合は以下の接尾辞を使用します。
-
固定文字 p または + に続けて正の時差を hhmm で記述。例:20250830T140000p0100 は UTC+01:00 (中央ヨーロッパ時間)。
-
固定文字 m に続けて負の時差を hhmmで記述。例:20250830T140000m0800 は UTC-08:00 (太平洋時間)。