나는 달리려고 노력하고있다.rtpbin 예GStream 1.18.5가 포함된 Ubuntu 21.10 VirtualBox VM.
- GStreamer를 설정하고 많은 것을 실행할 수 있었습니다기초적인그리고재생지도 시간.
- 나도 많은 부분을 읽었다.애플리케이션 개발자 핸드북.
C 코드에서 모든 작업을 수행하는 것이 간단해 보이지만 rtpbin
예제 gst-launch-1.0
에서는 (기본 튜토리얼 중 하나).
rtpbin
처음에는 예제가 작동 하지 못했습니다 .
ffenc_h263
및ffdec_h263
(WARNING: erroneous pipeline: no element "ffenc_h263"
)이므로 각각avenc_h263
및로 대체했습니다.avdec_h263
v4l2src
에서 사용할 수 없는 장치를 찾고 있어서/dev
으로 전환했습니다videotestsrc
.
이러한 대체 항목이 문제가 아닌지 확인하기 위해 RTSP 및 UDP 항목을 제거하고 다음을 실행하여 확인했습니다.
gst-launch-1.0 videotestsrc ! videoconvert ! avenc_h263 ! rtph263pay \
! rtph263depay ! avdec_h263 ! xvimagesink
그리고 "바" 비디오를 봤어요. 나도 도망쳤어
gst-launch-1.0 audiotestsrc ! amrnbenc ! rtpamrpay ! rtpamrdepay ! amrnbdec ! alsasink
짜증나는 테스트 톤을 들어보세요. 이를 토대로 볼 때 문제는 UDP와 RTSP에 있다고 생각됩니다.
달리기
gst-launch-1.0 rtpbin name=rtpbin \
videotestsrc ! videoconvert ! avenc_h263 ! rtph263pay ! rtpbin.send_rtp_sink_0 \
rtpbin.send_rtp_src_0 ! udpsink port=5000 \
rtpbin.send_rtcp_src_0 ! udpsink port=5001 sync=false async=false \
udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0 \
audiotestsrc ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1 \
rtpbin.send_rtp_src_1 ! udpsink port=5002 \
rtpbin.send_rtcp_src_1 ! udpsink port=5003 sync=false async=false \
udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1
프로그램
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:59.0 / 99:99:99 # This is counting up
그런 다음 다른 창에서 나는 실행합니다.
gst-launch-1.0 rtpbin name=rtpbin \
udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1996" \
port=5000 ! rtpbin.recv_rtp_sink_0 \
rtpbin. ! rtph263depay ! avdec_h263 ! xvimagesink \
udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \
rtpbin.send_rtcp_src_0 ! udpsink port=5005 sync=false async=false \
udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1" \
port=5002 ! rtpbin.recv_rtp_sink_1 \
rtpbin. ! rtpamrdepay ! amrnbdec ! alsasink \
udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \
rtpbin.send_rtcp_src_1 ! udpsink port=5007 sync=false async=false
그리고 봐라
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
일부 UDP 포트(5000, 5001, 5002, 5003, 5005 및 5007)가 열려 있을 것으로 예상했습니다. 물론, 실행중인 netstat
쇼는 다음과 같습니다.
rtsp@rtsp-VirtualBox:~$ sudo netstat -apn | grep -w 500[0-9]
udp 0 0 0.0.0.0:5000 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5001 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5002 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5003 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5005 0.0.0.0:* 6862/gst-launch-1.0
udp 0 0 0.0.0.0:5007 0.0.0.0:* 6862/gst-launch-1.0
모든 포트가 제대로 작동하는지 확인하세요.
rtsp-test-server
스냅과 VLC에서 설치했습니다 .- 제공된 포트를 통해 비디오를 스트리밍할 수 있습니다
rtsp-test-server
. UDP 대신 TCP 포트를 사용하기 때문에 완벽한 테스트는 아닌 것 같지만, 테스트하기가 쉽기 때문에 한번 시도해 보았습니다.
그러나 나는 어떤 영상도 보지 못했고 어떤 소리도 듣지 못했습니다. 누군가 내 실수를 지적할 수 있나요?
답변1
질문을 제출할 준비가 거의 다 되어서 다시 인터넷 검색을 했습니다. 내가 찾은이 튜토리얼udpsrc
및 요소 에 추가된 몇 가지 추가 플래그를 보여줍니다 udpsink
. 다음 플래그를 추가하면 예제가 작동하여 RTSP를 통해 비디오를 보고 사운드를 들을 수 있습니다.
host=127.0.0.1
모든udpsink
요소 에address=127.0.0.1
모든udpsource
요소 에
해당 튜토리얼에 남겨둔 다른 플래그는 기본값일 수 있다고 생각합니다.