Video Intelligence Streaming API תומך בפרוטוקולים סטנדרטיים של סטרימינג בשידור חי, כמו RTSP, RTMP ו-HLS. צינור ההטמעה של AIStreamer פועל כפרוקסי לסטרימינג, וממיר מפרוטוקולים של סטרימינג בשידור חי לחיבור gRPC דו-כיווני לסטרימינג.
כדי לתמוך בפרוטוקולים של סטרימינג בשידור חי, Video Intelligence API משתמש במסגרת המדיה הפתוחה GStreamer.
שלב 1: יצירת צינור בעל שם
צינור בעל שם נוצר כדי לאפשר תקשורת בין GStreamer לבין שרת ה-proxy של 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 שמכיל את המפתח של חשבון השירות.
קובץ תצורה לדוגמה – $CONFIG – זמין ב-github.
חשוב להגדיר את דגל הזמן הקצוב לתפוגה הנכון בשורת הפקודה. אם אתם צריכים להזרים סרטון באורך שעה, ערך הזמן הקצוב לתפוגה צריך להיות לפחות 3,600 שניות.
שלב 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. יש גם דוגמה ל-Docker שבה מוגדרות כל התלויות ב-build. אפשר למצוא את הקובץ הבינארי streaming_client_main שעבר קומפילציה בספרייה $BIN_DIR של קובץ אימג' של Docker.
מידע נוסף על השימוש ב-Docker זמין במאמר בנושא שימוש ב-Docker וב-Kubernetes.
בקרה על זרימת נתונים
לשרת של Video Intelligence Streaming API יש בקרה על זרימת נתונים מובנית.
בשני המקרים הבאים, בקשות StreamingAnnotateVideoRequest נדחות וחיבורי סטרימינג של gRPC נעצרים באופן מיידי:
הלקוח להעברת נתונים של AIStreamer שולח בקשות לשרתי Google בתדירות גבוהה מדי.
לקוח ההטמעה AIStreamer שולח יותר מדי נתונים לשרתים של Google (מעל 20 מגה-בייט לשנייה).
ויזואלייזר
הקוד של כלי הוויזואליזציה שמופיע ב-AIStreamer צריך להיחשב רק כדוגמה לקוד. יכול להיות שהכלי להמחשה לא תואם לסביבה המקומית של המשתמש. משתמשי AIStreamer לא צריכים להסתמך על קוד הלקוח כדי להציג את תוצאות ההערות.