Pi B +와 Pi 카메라를 얻었으며 이제 카메라에서 홈 서버로 H.264로 인코딩 된 비디오를 스트리밍하기 위해 가장 효율적인 (낮은 CPU) 최소 지연 시간 구성을 찾으려고 노력하고 있습니다.
나는 다음을 읽었다.
(모든 링크는의 gstreamer-1.0을 사용 deb http://vontaene.de/raspbian-updates/ . main
합니다.)
이와 관련하여 지난 몇 년간 많은 일이있었습니다.
원래 출력을 파이프 raspivid
로 gst-launch-1.0
연결해야 했습니다 (링크 1 참조).
그런 다음 (link 2) 공식 V4L2 드라이버가 생성되었으며 현재 표준이며 gstreamer 만 사용하여 파이프없이 데이터를 직접 얻을 수 있습니다 (특히 towolf 의 게시물 참조 »Sat Dec 07, 2013 3:34 pm 링크 참조) 2) :
발신자 (Pi) : gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
리시버: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
올바르게 이해하면 두 가지 방법 모두 GPU를 사용하여 H264 디코딩을 수행하지만 후자는 커널간에 프로세스를 거치지 않기 때문에 커널을 다시 거치지 않아도되므로 약간 효율적입니다.
이제 이것에 대해 몇 가지 질문이 있습니다.
후자는 여전히 카메라에서 H264를 효율적으로 얻는 가장 최근의 방법입니까? 에 대해 읽었으며
gst-omx
gstreamer 파이프 라인을 허용... video/x-raw ! omxh264enc ! ...
합니다. 이것 만 사용하는 것과 다른 것이video/x-h264
있습니까? 아니면 더 효율적일 수 있습니까? 차이점이 뭐야?video/x-h264 ...
파이프 라인을 사용할 때 실제로 어떤 gstreamer 인코딩 플러그인이 사용되는지 어떻게 알 수 있습니까? 이것은 내가 명시 적으로 (같은 (코드) 구성 요소의 이름을 다른 파이프 라인 부분에 비해 단지, 내가 원하는 형식을 지정하는 것 같다h264parse
또는fpsdisplaysink
).에서 링크 1이 응답 미카엘 Lepistö는 언급 "나는 측면 스트리밍에서 하나 개 불필요한 필터 패스를 제거" 그는 잘라 것을 의미
gdppay
하고gdpdepay
. 그것들은 무엇을 하는가? 왜 필요한가요? 정말 떼어 낼 수 있습니까?또한 수신 측
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
의 매개 변수를 지정udpsrc
하여 스트림 중간에 스트리밍을 시작 / 다시 시작할 수 있다고 언급 합니다. 이 캡은 무엇을 달성하며 왜 이러한 특정 선택이 필요한지 어디서 더 읽을 수 있습니까?질문 3과 4에서 제안한 작업을 수행하면 (
caps
, 삭제gdppay
및 추가gdpdepay
) 비디오 대기 시간이 훨씬 더 나빠집니다 (시간이 지남에 따라 대기 시간이 증가하고 몇 분 후에 비디오가 중지됨)! 왜 그런가요? 원래 명령으로 얻은 대기 시간을 얻고 싶지만 언제든지 스트림에 참여할 수있는 기능이 있습니다.RTSP + RTP는 일반적으로 TCP와 UDP의 조합을 사용한다는 것을 읽었습니다. TCP는 제어 메시지 및 기타 손실되지 않아야하는 것들과 실제 비디오 데이터 전송을 위해 UDP를 사용합니다. 위의 설정에서 실제로 사용하고 있습니까, 아니면 UDP 만 사용하고 있습니까? gstreamer가 이것을 처리하는지 여부는 약간 불투명합니다.
이 질문들 중 하나라도 대답 해 주셔서 감사합니다!
cat file | grep ...
않고 대신에 약간의 오버 헤드가 있다고합니다 grep ... file
. 이 파이프는 커널과의 또 다른 복사 계층을 추가하며, 특히 메모리 대역폭이 낮은 장치에서 쉽게 측정 할 수 있습니다. gstreamer가 장치 파일에서 독창적으로 읽을 수 있다면 왜 사용하지 않습니까? 귀하의 raspivid | cvlc
제안 과 관련하여 : gstreamer 기반 솔루션으로 전환하기 전에 이것을 사용했지만 gstreamer보다 대기 시간이 최대 3 초 더 깁니다 (이유는 모르겠습니다).
cvlc
~ 45 %를 사용하지만 해당 데이터 속도로 파이프를 통해 실행 하면 (파이프가 속도를 늦추지 않고) 다시 염두에두면 바늘이 거의 움직이지 않을 것이라고 생각합니다. <5 %처럼. 물론 가능한 한 효율적으로이 작업을 수행하려는 경우 전혀 중요하지 않습니다 ...
raspivid | cvlc
것은 40-50 %입니다. 사람들은 특정 인물을 개선하도록 도전하는 질문에 더 잘 응답 할 수 있습니다. 지금 당장은 왜 각 이유가 중요한지 설명하지 않고 많은 이유를 묻습니다.
|
이러한 맥락에서 문제가 발생 한다는 아이디어 는 놀라운 BS입니다. 어떤raspivid | cvlc
방법 을 사용해 보셨습니까 ? 나는 카메라를 오랫동안 가지고 놀지 않았지만 그것을 사용하여 http 스트림 (다른 쪽 끝에서 Linux에서 볼 수 있음)을 생성하는vlc
데 괜찮은 것처럼 보입니다.