728x90
반응형
Chapter 10. Video Streaming (비디오 스트리밍)
이 섹션에서는 일부 GStreamer 파이프라인 예제와 지원하는 디바이스를 사용하여 비디오, 카메라, 오디오 스트리밍을 수행하는 방법을 보여준다.
10.1. Video file Streaming (비디오 파일 스트리밍)
10.1.1. Video UDP Streaming (비디오 UDP 스트리밍)
- SERVER
$ gst-launch-1.0 -v filesrc location=<filename.mp4> ! \ qtdemux ! queue ! rtph264pay ! \ udpsink host=<CLIENT_IP>
UDP 스트리밍을 수행하려면, SERVER 파이프라인의 상세 정보(-v)를 활성화해야 한다. 출력 값은 다음과 같다 :
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4,
profile=(string)high,
codec_data=(buffer)01640028ffe1001e67640028acd940780227e5c05a808080a0000003002000000641e30632c001000568e93b2c8bfdf8f800, width=(int)1920,
height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4,
profile=(string)high,
codec_data=(buffer)01640028ffe1001e67640028acd940780227e5c05a808080a0000003002000000641e30632c001000568e93b2c8bfdf8f800, width=(int)1920,
height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000,
encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)640028, sprop-parametersets=(
string)"Z2QAKKzZQHgCJ+XAWoCAgKAAAAMAIAAABkHjBjLA\,aOk7LIs\=", payload=(int)96, ssrc=(uint)1622932748, timestampoffset=(
uint)2591288474, seqnum-offset=(uint)8760, a-framerate=(string)25
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encodingname=(
string)H264, packetization-mode=(string)1, profile-level-id=(string)640028, sprop-parametersets=(
string)"Z2QAKKzZQHgCJ+XAWoCAgKAAAAMAIAAABkHjBjLA\,aOk7LIs\=", payload=(int)96, ssrc=(uint)1622932748, timestampoffset=(
uint)2591288474, seqnum-offset=(uint)8760, a-framerate=(string)25
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:sink: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au,
level=(string)4, profile=(string)high,
codec_data=(buffer)01640028ffe1001e67640028acd940780227e5c05a808080a0000003002000000641e30632c001000568e93b2c8bfdf8f800, width=(int)1920,
height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: timestamp = 2591288474
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: seqnum = 8760
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
출력 값을 검사하여 caps = "application/x-rtp"를 검색하고 해당 값을 복사한다.
- CLIENT
caps 값은 CLIENT 파이프라인에서 사용해야 하므로 CAPS 값으로 export 한다.
export CAPS='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1,
profile-level-id=(string)640028, sprop-parameter-sets=(string)"Z2QAKKzZQHgCJ+XAWoCAgKAAAAMAIAAABkHjBjLA\,aOk7LIs\=", payload=(int)96,
ssrc=(uint)1622932748, timestamp-offset=(uint)2591288474, seqnum-offset=(uint)8760, a-framerate=(string)25'
그런 다음 udpsrc 파이프라인을 실행한다.
$ gst-launch-1.0 udpsrc caps = $CAPS ! \
rtpjitterbuffer latency=100 ! queue max-size-buffers=0 ! \
rtph264depay ! decodebin ! autovideosink sync=false
10.1.2. Video Multi UDP Streaming (비디오 멀티 UDP 스트리밍)
- SERVER
$ gst-launch-1.0 -v filesrc location=<filename.mp4> ! \ qtdemux ! queue ! rtph264pay ! \ multiudpsink clients=<CLIENT_IP_1>:5000,<CLIENT_IP_2>:5004
- CLIENT_1
$ gst-launch-1.0 udpsrc port=5000 caps = $CAPS ! \ rtpjitterbuffer latency=100 ! queue max-size-buffers=0 ! \ rtph264depay ! decodebin ! autovideosink sync=false
- CLIENT_2
$ gst-launch-1.0 udpsrc port=5004 caps = $CAPS ! \ rtpjitterbuffer latency=100 ! queue max-size-buffers=0 ! \ rtph264depay ! decodebin ! autovideosink sync=false
정보
CAPS 값에 대한 자세한 내용은 Video UDP Streaming 섹션(10.1.1)을 확인한다.
10.1.3. Video TCP Streaming (비디오 TCP 스트리밍)
- SERVER
$ gst-launch-1.0 filesrc location=<video_file>.mov ! \ decodebin ! vpuenc_h264 gop-size=2 bitrate=10000 ! \ rtph264pay pt=96 timestamp-offset=0 ! gdppay ! \ tcpserversink blocksize=512000 host=<SERVER_IP> port=8554 sync=false
- CLIENT
$ gst-launch-1.0 tcpclientsrc host=<SERVER_IP> port=8554 ! gdpdepay ! queue max-size-buffers=0 ! \ 'application/x-rtp, framerate=(fraction)24/1, media=(string)video, clock10-rate=(int)90000, payload=(int)96' ! \ rtpjitterbuffer latency=100 ! rtph264depay ! \ decodebin ! autovideosink sync=false
10.1.4. Video RTSP Streaming (비디오 RTSP 스트리밍)
정보
i.MX 8 디바이스에서 RTSP 프로코콜 지원을 활성화 하려면 i.MX 8 - RTSP Streaming Support 문서를 확인한다.
- SERVER
$ gst-variable-rtsp-server -p 9001 -u \ "filesrc location=<filename.mp4> ! \ qtdemux ! queue ! rtph264pay name=pay0 pt=96"
- CLIENT
$ gst-launch-1.0 rtspsrc location=rtsp://$SERVERIP:9001/stream ! \ queue ! rtph264depay ! v4l2h264dec ! autovideosink
10.1.5. Video Streaming to PC/VLC (PC/VLC로 비디오 스트리밍)
- SERVER
$ gst-launch-1.0 -v filesrc location=<video_file>.mov ! \ qtdemux ! rtph264pay ! \ udpsink host=<CLIENT_IP> port=5004
Linux PC에서 test_video.sdp라는 텍스트 파일을 만들고 다음 내용을 복사한다.
- CLIENT
v=0 m=video 5000 RTP/AVP 96 c=IN IP4 <SERVER_IP> a=rtpmap:96 H264/90000 a=fmtp:96 sprop-parameter-sets=J01AHqkYGwe83gDUBAQG2wrXvfAQ=,KN4JyA=;
정보
sprop-parameter-sets 콘텐츠에 대한 자세한 내용은 Video UDP Streaming 장에서 CAPS 값을 확인한다.
그런 다음 서버를 시작하고 VLC 응용프로그램으로 파일을 연다.
10.2. Camera Streaming (카메라 스트리밍)
10.2.1. Camera UDP Streaming (카메라 UDP 스트리밍)
- SERVER
$ gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=720' ! \ rtpvrawpay pt=96 timestamp-offset=0 ! queue max-size-buffers=0 ! \ udpsink host=<CLIENT_IP>
- CLIENT
$ gst-launch-1.0 udpsrc caps = $CAPS ! \ rtpjitterbuffer latency=1 ! queue max-size-buffers=0 ! \ rtpvrawdepay ! autovideosink sync=false
정보
CAPS 값에 대한 자세한 내용은 Video UDP Streaming 섹션을 확인한다.
10.2.2. Camera TCP Streaming (카메라 TCP 스트리밍)
- SERVER
$ gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=720' ! \ rtpvrawpay pt=96 timestamp-offset=0 ! queue max-size-buffers=0 ! gdppay ! \ tcpserversink blocksize=512000 host=<SERVER_IP> port=8554 sync=false
- CLIENT
$ gst-launch-1.0 tcpclientsrc host=<SERVER_IP> port=8554 ! gdpdepay ! queue max-size-buffers=0 ! \ 'application/x-rtp, framerate=(fraction)24/1, media=(string)video, clock10-rate=(int)90000, payload=(int)96' ! \ rtpjitterbuffer latency=100 ! rtpvrawdepay ! \ decodebin ! autovideosink sync=false
10.2.3. Camera RTSP Streaming (카메라 RTSP 스트리밍)
정보
i.MX 8 디바이스에서 RTSP 프로토콜 지원을 활성화 하려면, i.MX 8 - RTSP Streaming Support 문서를 확인한다.
- SERVER
$ gst-variable-rtsp-server -p 9001 -u \ "v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! \ v4l2h264enc ! rtph264pay name=pay0 pt=96"
- CLIENT
$ gst-launch-1.0 rtspsrc location=rtsp://$SERVERIP:9001/stream ! \ queue ! rtph264depay ! v4l2h264dec ! autovideosink
10.3. Audio Streaming (오디오 스트리밍)
10.3.1. Audio UDP Streaming (오디오 UDP 스트리밍)
- SERVER
$ gst-launch-1.0 -v filesrc location=<audio_file>.mp3 ! \ id3demux ! mpegaudioparse ! rtpmpapay ! \ udpsink host=<CLIENT_IP> port=5004
- CLIENT
$ gst-launch-1.0 udpsrc port=5004 caps= $CAPS ! \ rtpmpadepay ! queue ! \ beepdec ! alsasink sync=false
정보
CAPS 값에 대한 자세한 내용은 Video UDP Streaming 섹션을 확인한다.
10.3.2. Audio Streaming to PC/VLC (PC/VLC로 오디오 스트리밍)
- SERVER
$ gst-launch-1.0 filesrc location=<audio_file>.mp3 ! \ id3demux ! mpegaudioparse ! rtpmpapay ! \ udpsink host=<CLIENT_IP> port=5004
Linux PC에서 test_audio.sdp라는 텍스트 파일을 만들고 다음 내용을 복사한다 :
- CLIENT
v=0 m=audio 5004 RTP/AVP 98 c=IN IP4 <SERVER_IP> a=rtpmap:98 MP4A-LATM/48000
그런 다음 서버를 시작하고 VLC 응용 프로그램으로 파일을 연다.
10.4. Video and Audio Streaming (비디오와 오디오 스트리밍)
10.4.1. Video and Audio Streaming to PC/VLC (PC/VLC로 비디오, 오디오 스트리밍)
- SERVER
$ gst-launch-1.0 -v filesrc location=<video_file>.mov ! qtdemux name=demux \ demux. ! queue ! rtph264pay name=pay0 pt=96 ! udpsink host=<CLIENT_IP> port=5000 sync=false \ demux. ! queue ! mpegaudioparse ! rtpmpapay ! udpsink host=<CLIENT_IP> port=5004 sync=false
Linux PC에서 test_audio.sdp라는 텍스트 파일을 만들고 다음 내용을 복사한다 :
- CLIENT
v=0 m=video 5000 RTP/AVP 96 c=IN IP4 <SERVER_IP> a=rtpmap:96 H264/90000 a=fmtp:96 sprop-parameter-sets=J01AHqkYGwe83gDUBAQG2wrXvfAQ=,KN4JyA=; m=audio 5004 RTP/AVP 98 a=rtpmap:98 MP4A-LATM/48000
정보
sprop-parameter-sets 콘텐츠에 대한 자세한 내용은 Video UDP Streaming 섹션에서 CAPS 값을 확인한다.
그런 다음 서버를 시작하고 VLC 응용 프로그램으로 파일을 연다.
728x90
반응형
'NXP i.MX SoC Family > i.MX 8 GStreamer User Guide' 카테고리의 다른 글
i.MX 8 GStreamer User Guide - Video Composition (0) | 2022.04.22 |
---|---|
i.MX 8 GStreamer User Guide - Multi-Display Examples (0) | 2022.04.20 |
i.MX 8 GStreamer User Guide - Transcode Examples (0) | 2022.04.20 |
i.MX 8 GStreamer User Guide - Image Examples (0) | 2022.04.20 |
i.MX 8 GStreamer User Guide - Audio Examples (0) | 2022.04.20 |