2012-08-16 5 views
1

GStreamer를 사용하여 UDP를 통해 v4l2src을 스트리밍하려고합니다. 보내는 부분이 (분명히) 괜찮지 만받는 부분에 뭔가 빠져 있습니다. GStreamer UDP 한 줄짜리 송수신

실제 라인은 다음과 같습니다

보내기 : gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' ! rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0

는 수신 : gst-launch-0.10 -v gstrtpbin name=rtpbin udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YUV, depth=(string)8, width=(string)320, height=(string)120, colorimetry=(string)SMPTE240M" port=9996 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtpvrawdepay ! video/x-raw-yuv,framerate=15/1 ! xvimagesink udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false

나는 무엇을 놓치고?

감사

편집 :

캡의 일부는 그래서 없어진 내가 그들을 추가 이제 수신기가 충돌하지 않고 단지 아무것도 표시하지 않고 유휴 상태.

보내기 : gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' ! rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0

는 수신 : gst-launch-0.10 -v gstrtpbin name=rtpbin udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)320, height=(string)240, colorimetry=(string)SMPTE240M, ssrc=(uint)956768427, payload=(int)96, clock-base=(uint)1415613946, seqnum-base=(uint)35008" port=9996 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtpvrawdepay ! video/x-raw-yuv,framerate=15/1 ! xvimagesink udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false

답변

5

당신이 만들고있는 실수는 당신이 당신의 v4l2src 밖으로 줄 것이다 것을 가정한다는 것이다. 특정 프레임 속도의 높이와 너비를 원한다면, 당신은 지금 당신이 리시버 측에 사용해야하는 캡을 인쇄합니다 videoscale 및 videorate 필터

gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! videorate ! videoscale ! ffmpegcolorspace ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' ! rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0 

이를 사용해야합니다. 예 : 나를 위해 이것은 인쇄되었다. /GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtp_src_0.GstProxyPad:proxypad2 : caps = application/x-rtp, 미디어 = (문자열) 비디오, 클럭 속도 = (int) 90000, 인코딩 이름 = (문자열) RAW , 샘플링 = (문자열) YCbCr-4 : 4 : 4, 깊이 = (문자열) 8, 폭 = (문자열) 320, 높이 = (문자열) 240, colorimetry = (문자열) SMPTE240M, ssrc = (단위) 1825678493, 페이로드 = (int)를 96 클록 계 = (단위) 4,068,866,987, SEQNUM 계 = (단위) 리시버 파이프에 사용 24,582

:

GST_DEBUG=2 gst-launch udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:4:4, depth=(string)8, width=(string)320, height=(string)240, colorimetry=(string)SMPTE240M, ssrc=(uint)1825678493, payload=(int)96, clock-base=(uint)4068866987, seqnum-base=(uint)24582" port=9996 ! queue ! rtpvrawdepay ! queue ! ffmpegcolorspace ! autovideosink 

여기서 수신기는를 알 방법이 없다 정확한 대문자이므로 발신자 쪽에서 붙여 넣기해야합니다. 다른 샘플링을 원하면 ffmpegcolorspace를 보낸 사람에게 사용하고 그 뒤에 적절한 대문자를 설정하십시오. (너비, 높이 및 프레임 속도와 함께)

위의 파이프 라인은 저에게 잘 작동합니다. ssrc 및 일부 다른 매개 변수는 src가 실행될 때마다 다를 수 있습니다.

+0

정확하게 원했던대로 작동했습니다! 고맙습니다. <...> 추 신 : 오디오를 추가하기가 어려울까요? – alexandernst

+0

아닙니다. 같은 원칙이 적용됩니다. 먼저 별도의 오디오 전용 파이프 라인을 만드는 것이 좋습니다. 그런 다음 둘을 결합하십시오. – av501

관련 문제