Skip to main content

Amazon Kinesis Video Streams: GStreamer コマンドラインツールによる送信方法

GStreamer のコマンドラインツール (gst-launch-1.0) を使って Kinesis Video Streams に映像を送信するコマンドの例です。

参考) GStreamer Element Parameter Reference

環境変数設定

export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_DEFAULT_REGION=ap-northeast-1
STREAM_NAME=stream-test

Kinesis Video Streams への送信

テスト映像 (RAW) → Kinesis Video Streams (H.264 にエンコード)

gst-launch-1.0 \
videotestsrc \
! video/x-raw,width=640,height=480,framerate=30/1 \
! x264enc \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au,profile=high \
! kvssink stream-name="${STREAM_NAME}" storage-size=512

mp4 ファイル (H.264) → Kinesis Video Streams

MOVIE_FILE=test.mp4
gst-launch-1.0 \
filesrc location="${MOVIE_FILE}" \
! qtdemux \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! kvssink stream-name="${STREAM_NAME}" storage-size=512

mp4 ファイル (H.264) → Kinesis Video Streams / 時間指定

MOVIE_FILE=test.mp4
START_TIME=1640185200
gst-launch-1.0 \
filesrc location="${MOVIE_FILE}" \
! qtdemux \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! kvssink stream-name="${STREAM_NAME}" storage-size=512 \
streaming-type=offline \
file-start-time=${START_TIME}

※streaming-type=offline と file-start-time パラメーターは 2021-12-23 現在ドキュメント上は未サポートとなっています。

RTSP (MP4V) → Kinesis Video Streams (H.264 にエンコード)

RTSP (MP4V) → Kinesis Video Streams (H.264 にエンコード)

RTSP_URL=rtsp://...
BPS=1024000
gst-launch-1.0 \
rtspsrc location="${RTSP_URL}" protocols=tcp \
! rtpmp4vdepay \
! avdec_mpeg4 \
! queue \
! x264enc bitrate=${BPS} key-int-max=10 \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! kvssink stream-name="${STREAM_NAME}" storage-size=512

RTSP (H.264) → Kinesis Video Streams

RTSP (H.264) → Kinesis Video Streams

RTSP_URL=rtsp://...
gst-launch-1.0 \
rtspsrc location="${RTSP_URL}" protocols=tcp \
! rtph264depay \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! kvssink stream-name="${STREAM_NAME}" storage-size=512

RTSP (H.264 + AAC) → Kinesis Video Streams

RTSP (H.264 + AAC) → Kinesis Video Streams

gst-launch-1.0 \
rtspsrc location="${RTSP_URL}" protocols=tcp name=src \
src. \
! queue \
! rtph264depay \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! sink. \
src. \
! queue \
! rtpmp4gdepay \
! aacparse \
! sink. \
kvssink stream-name="${STREAM_NAME}" storage-size=512 name=sink

RTSP (H.264) → Kinesis Video Streams (H.264 に再エンコード)

RTSP_URL=rtsp://...
BPS=1024000
gst-launch-1.0 \
rtspsrc location="${RTSP_URL}" protocols=tcp \
! rtph264depay \
! avdec_h264 \
! queue \
! x264enc bitrate=${BPS} key-int-max=10 \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! kvssink stream-name="${STREAM_NAME}" storage-size=512

組み合わせ例

H.264 配信しながら 1 FPS で JPEG 保存

H.264 配信しながら 1 FPS で JPEG 保存

RTSP_URL=rtsp://...
gst-launch-1.0 \
rtspsrc location="${RTSP_URL}" protocols=tcp \
! rtph264depay \
! tee name=t \
! h264parse \
! video/x-h264,stream-format=avc,alignment=au \
! kvssink stream-name="${STREAM_NAME}" storage-size=512 \
t. \
! queue \
! avdec_h264 \
! videorate \
! video/x-raw,framerate=1/1 \
! jpegenc \
! multifilesink location="frame%02d.jpg" max-files=10