실시간 동영상 스트리밍 방법

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시간 동영상을 스트리밍하려면 제한 시간 값을 최소 3,600초로 설정해야 합니다.

3단계: GStreamer 파이프라인 실행

GStreamer는 다음과 같은 여러 실시간 스트리밍 프로토콜을 지원합니다.

  • HTTP 실시간 스트리밍(HLS)

  • 실시간 스트리밍 프로토콜(RTSP)

  • 실시간 프로토콜(RTP)

  • 실시간 메시징 프로토콜(RTMP)

  • 웹RTC(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 서버에 초당 20Mbytes를 초과하는 너무 많은 데이터를 전송합니다.

시각화 장치

AIStreamer에 제공된 시각화 장치 코드는 코드 예시로만 고려되어야 합니다. 시각화 장치가 사용자의 로컬 환경과 호환되지 않을 수 있습니다. AIStreamer는 주석 결과를 시각화하기 위해 클라이언트 코드에 의존하지 않아야 합니다.