ライブ動画をストリーミングする方法

は、

Cloud Video Intelligence Streaming API は、RTSP、RTMP、HLS など標準のライブ ストリーミング プロトコルをサポートしています。AIStreamer の取り込みパイプラインは、ストリーミング プロキシとして動作して、ライブ ストリーミング プロトコルを gRPC 接続の双方向ストリーミングに変換します。

Video Intelligence では、ライブ ストリーミング プロトコルをサポートするために、gStreamer オープン メディア フレームワークを使用します。

ステップ 1: 名前付きパイプを作成する

gStreamer と AIStreamer 取り込みプロキシの間の通信用に、名前付きパイプを作成します。2 つのプロセスは同じ Docker コンテナ内で実行されます。

$ export PIPE_NAME=/path_to_pipe/pipe_name
$ mkfifo $PIPE_NAME

ステップ 2: AIStreamer 取り込みプロキシを実行する

C ++ の例をご利用いただけます。この例には、すべての機能をサポートする単一のバイナリが含まれています。この例をビルドするには、ビルド手順をご覧ください。

次の例は、コマンドラインから上記のバイナリを使用する方法を示しています。

$ export GOOGLE_APPLICATION_CREDENTIALS=/path_to_credential/credential_json
$ export CONFIG=/path_to_config/config_json
$ export PIPE_NAME=/path_to_pipe/pipe_name
$ export TIMEOUT=3600
$ ./streaming_client_main --alsologtostderr --endpoint "dns:///alpha-videointelligence.googleapis.com" \
      --video_path=$PIPE_NAME --use_pipe=true --config=$CONFIG --timeout=$TIMEOUT

$GOOGLE_APPLICATION_CREDENTIALS には、サービス アカウントキーを含む JSON ファイルのファイルパスを指定します。

構成ファイルの例(上記の例の $CONFIG)は、こちらをご覧ください。

コマンドラインで正しいタイムアウト フラグを確実に設定してください。1 時間の動画をストリーミングする場合は、タイムアウト値を少なくとも 3600 秒に設定する必要があります。

ステップ 3: gStreamer パイプラインを実行する

gStreamer は複数のライブ ストリーミング プロトコルをサポートしています(ただし、これらに限定されません)。

  • HTTP Live Streaming(HLS)

  • リアルタイム ストリーミング プロトコル(RTSP)

  • リアルタイム プロトコル(RTP)

  • リアルタイム メッセージング プロトコル(RTMP)

  • WebRTC

  • ウェブカメラからのストリーミング

Video Intelligence は、gStreamer パイプラインを使用してこれらのライブ ストリーミング プロトコルから復号可能な動画ストリームに変換し、そのストリームをステップ 1 で作成した名前付きパイプに書き込みます。

次の例では、HLS、RTSP、RTMP プロトコルを使用してライブ ストリーミング ライブラリを使用する方法を示します。

HTTP Live Streaming(HLS)

$ export PIPE_NAME=/path_to_pipe/pipe_name
$ export HLS_SOURCE=http://abc.def/playlist.m3u8
$ gst-launch-1.0 -v souphttpsrc location=$HLS_SOURCE ! hlsdemux ! filesink location=$PIPE_NAME

リアルタイム ストリーミング プロトコル(RTSP)

$ export PIPE_NAME=/path_to_pipe/pipe_name
$ export RTSP_SOURCE=rtsp://ip_addr:port/stream
$ gst-launch-1.0 -v rtspsrc location=$RTSP_SOURCE ! rtpjitterbuffer ! rtph264depay \
      ! h264parse ! mp4mux ! filesink location=$PIPE_NAME

リアルタイム メッセージング プロトコル(RTMP)

$ export PIPE_NAME=/path_to_pipe/pipe_name
$ export RTMP_SOURCE=rtmp://host/app/stream
$ gst-launch-1.0 -v rtmpsrc location=$RTMP_SOURCE ! flvdemux ! flvmux ! filesink location=$PIPE_NAME

ビルド手順

バイナリの例Bazel を使ってビルドします。すべてのビルド依存関係が構成されている Docker の例も用意されています。また、コンパイル済みの streaming_client_main バイナリが、Docker イメージの $BIN_DIR ディレクトリ内にあります。

Docker の使用に関する詳細については、Docker と Kubernetes の使用をご覧ください。

フロー制御

Cloud Video Intelligence Streaming API サーバーには固有のフロー制御が備わっています。 次の 2 つの場合は、StreamingAnnotateVideoRequest リクエストが拒否され、gRPC ストリーミング接続が直ちに停止されます。

  • AIStreamer インジェスト クライアントから Google サーバーにリクエストが送信される頻度が多すぎる場合

  • AIStreamer インジェスト クライアントから Google サーバーに送信されるデータが大きすぎる(毎秒 20 メガバイトを超える)場合

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Video Intelligence API ドキュメント