Video Intelligence Streaming API 支持标准实时流式传输协议,如 RTSP、RTMP 和 HLS。AIStreamer 提取流水线充当流式传输代理,从实时流式传输协议转换为双向流式传输 gRPC 连接。
为了支持实时流式传输协议,Video Intelligence API 使用 GStreamer 开放式媒体框架。
第 1 步:创建已命名的管道
创建已命名的管道是为了在 GStreamer 和 AIStreamer 提取代理之间通信。这两个进程在同一个 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 提取代理
这些 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 Live Streaming (HLS)
实时流式传输协议 (RTSP)
实时协议 (RTP)
实时消息传递协议 (RTMP)
WebRTC
从网络摄像头流式传输
Video Intelligence API 使用 GStreamer 流水线从这些实时流式传输协议转换为可解码的视频串流,并将该串流写入第 1 步中创建的已命名管道。
以下示例演示了如何通过 HLS、RTSP 和 RTMP 协议使用实时流式传输库。
HTTP Live Streaming (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 构建的。Google 还提供了已配置所有构建依赖项的 Docker 示例。您可以在 Docker 映像的 $BIN_DIR
目录中找到已编译的 streaming_client_main
二进制文件。
如需了解有关如何使用 Docker 的更多信息,请参阅使用 Docker 和 Kubernetes。
流控制
Video Intelligence Streaming API 服务器具备固有的流控制功能。在以下两种情况下,StreamingAnnotateVideoRequest
请求会被拒绝,并且 gRPC 流式连接会立即停止:
AIStreamer 提取客户端过于频繁地向 Google 服务器发送请求时
AIStreamer 提取客户端向 Google 服务器发送过多数据(每秒超过 20MB)时。
可视化工具
AIStreamer 中提供的 Visualizer 代码应仅被视为代码示例。Visualizer 可能与用户的本地环境不兼容。AIStreamer 用户不应依赖客户端代码来可视化注释结果。