如何串流直播影片

Video Intelligence Streaming API 支援標準即時串流通訊協定,例如 RTSP、RTMP 與 HLS。AIStreamer 擷取管道的行為就像串流 Proxy 一樣,可從即時串流通訊協定轉換為雙向串流 gRPC 連線。

為了支援即時串流通訊協定,Video Intelligence API 使用 GStreamer 開放媒體架構。

步驟 1:建立已命名的管線

已命名的管線會建立來在 GStreamer 與 AIStreamer 擷取 Proxy 之間通訊。這兩個程序在同一個 Docker 容器內執行。

  • path_to_pipe:本機環境中的檔案路徑。例如 /user/local/Desktop/
  • name_of_pipe:您提供的管道名稱。例如:my-football-game
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ mkfifo $PIPE_NAME

示例:/user/local/Desktop/my-football-game

步驟 2:執行 AIStreamer 擷取 Proxy

您可以使用這些 C++ 範例,其中包含支援所有功能的單一二進位。如要建構範例,請按照建構指示操作。

下列範例顯示如何從指令列使用二進位。

$ export GOOGLE_APPLICATION_CREDENTIALS=/path_to_credential/credential_json
$ export CONFIG=/path_to_config/config_json
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ 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 檔案路徑。

您可以在 github 上找到範例設定檔 $CONFIG

確認在指令列中設定正確的逾時標記。如果您需要串流 1 小時的影片,逾時值應至少為 3600 秒。

步驟 3:執行 GStreamer 管道

GStreamer 支援多個即時串流通訊協定,包括但不限於以下項目:

  • HTTP 即時串流 (HLS)

  • 即時串流通訊協定 (RTSP)

  • 即時通訊協定 (RTP)

  • 即時訊息傳遞通訊協定 (RTMP)

  • WebRTC

  • 從網路攝影機串流

Video Intelligence API 會使用 GStreamer 管道,從這些即時串流通訊協定轉換為可解碼的影片串流,並將串流寫入至在步驟 1 中建立的已命名管道。

下列範例示範如何使用即時串流程式庫 (這些程式庫使用 HLS、RTSP 與 RTMP 通訊協定)。

HTTP 即時串流 (HLS)

$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ 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/name_of_pipe
$ export RTSP_SOURCE=rtsp://ip_addr:port/stream
$ gst-launch-1.0 -v rtspsrc location=$RTSP_SOURCE ! rtpjitterbuffer ! rtph264depay \
      ! h264parse ! flvmux ! filesink location=$PIPE_NAME

即時訊息通訊協定 (RTMP)

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

建構指示

二進位範例使用 Bazel 建構,另外也提供已設定所有建構依附元件的 Docker 範例。您可以在 Docker 映像檔的 $BIN_DIR 目錄中找到已編譯的 streaming_client_main 二進位檔。

如要進一步瞭解如何使用 Docker,請參閱使用 Docker & Kubernetes 一文。

流量控制

Video Intelligence Streaming API 伺服器具有固有的流量控制功能。在以下兩種情況下,StreamingAnnotateVideoRequest 要求會遭到拒絕,gRPC 串流連線會立即停止:

  • AIStreamer 擷取用戶端傳送要求給 Google 伺服器的頻率過高。

  • AIStreamer 擷取用戶端傳送太多資料給 Google 伺服器 (超出每秒 20MB)。

圖像影片

AI Streamer 提供的視覺化程式碼僅應視為程式碼範例。視覺化工具可能與使用者的本機環境不相容。AIStreamer 使用者應依賴用戶端程式碼來視覺化註解結果。