Video Intelligence Streaming API mendukung protokol live streaming standar seperti RTSP, RTMP, dan HLS. Pipeline penyerapan AIStreamer berperilaku sebagai proxy streaming, yang mengonversi dari protokol live streaming ke koneksi gRPC streaming dua arah.
Untuk mendukung protokol live streaming, Video Intelligence API menggunakan framework media terbuka GStreamer.
Langkah 1: Buat pipa bernama
Named pipe dibuat untuk berkomunikasi antara GStreamer dan proxy penyerapan AIStreamer. Kedua proses berjalan di dalam container Docker yang sama.
- path_to_pipe: jalur file di lingkungan lokal Anda. Misalnya, /user/local/Desktop/
- name_of_pipe: nama pipa yang Anda berikan. Misalnya,
my-football-game
$ export PIPE_NAME=/path_to_pipe/name_of_pipe $ mkfifo $PIPE_NAME
Contoh: /user/local/Desktop/my-football-game
Langkah 2: Jalankan proxy penyerapan AIStreamer
Contoh C++ ini, yang tersedia untuk Anda gunakan, menyertakan satu biner yang mendukung semua fitur. Untuk membuat contoh, ikuti petunjuk pembuatan ini.
Contoh berikut menunjukkan cara menggunakan biner dari command line.
$ 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
menentukan jalur file
file JSON yang berisi kunci akun layanan Anda.
Anda dapat menemukan contoh file konfigurasi—$CONFIG
di github.
Pastikan untuk menyetel tanda waktu tunggu yang benar di command line. Jika Anda perlu melakukan streaming video berdurasi 1 jam, nilai waktu tunggu harus minimal 3.600 detik.
Langkah 3: Jalankan pipeline GStreamer
GStreamer mendukung beberapa protokol live streaming, termasuk, tetapi tidak terbatas pada:
HTTP Live Streaming (HLS)
Real-time Streaming Protocol (RTSP)
Real-time Protocol (RTP)
Real-time Messaging Protocol (RTMP)
WebRTC
Streaming dari Webcam
Video Intelligence API menggunakan pipeline GStreamer untuk mengonversi dari protokol live streaming ini ke aliran video yang dapat didekode, dan menulis aliran ke named pipe yang dibuat pada Langkah 1.
Contoh berikut menunjukkan cara menggunakan library live streaming menggunakan protokol HLS, RTSP, dan 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
Real-time Streaming Protocol (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
Real-time Message Protocol (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
Petunjuk pembuatan
Contoh biner
dibuat menggunakan Bazel. Contoh Docker yang telah mengonfigurasi semua dependensi build juga disediakan. Anda dapat menemukan biner streaming_client_main
yang dikompilasi di direktori $BIN_DIR
image Docker.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan Docker, lihat Menggunakan Docker & Kubernetes.
Kontrol alur
Server Video Intelligence Streaming API memiliki kontrol alur bawaan.
Dalam dua kasus berikut,permintaanStreamingAnnotateVideoRequest
ditolak, dan koneksi streaming gRPC segera dihentikan:
Klien penyerapan AIStreamer mengirim permintaan ke server Google terlalu sering.
Klien penyerapan AIStreamer mengirimkan terlalu banyak data ke server Google (lebih dari 20 Mbyte per detik).
Visualizer
Kode visualizer yang disediakan di AIStreamer hanya boleh dianggap sebagai contoh kode. Visualizer mungkin tidak kompatibel dengan lingkungan lokal pengguna. Pengguna AIStreamer tidak boleh mengandalkan kode klien untuk memvisualisasikan hasil anotasi.