Logitech C920으로 스트리밍 H264


13

logitech C920 웹캠이 있습니다. H264로 비디오를 직접 인코딩 할 수 있습니다.

Beaglebone으로 수행 한 작업을 재현하고 싶지만 Raspberry Pi를 사용하여 H264 스트림을 네트워크에 보냅니다 . Raspberry Pi는 RTP에서 스트림을 패킷 화하기 위해 여기에만 있으며 비디오 압축은 웹캠 자체에서 수행됩니다. H264 모드는 video4linux를 사용하여 시행됩니다.

지금까지 최신 버전의 Ubuntu가있는 일반 컴퓨터를 사용하면 VLC를 서버 또는 GStreamer로 사용하여 작동합니다. 예를 들어 Raspberry Pi에서 VLC 서버를 다음 명령을 사용하여 시작하면 :

cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'

... 그리고 다른 컴퓨터에서 VLC로 스트림을 읽으면 모든 것이 옳습니다.

그러나 라즈베리 파이를 사용하여 비디오 스트림을 보내면 결과가 매우 좋지 않습니다. 무언가가 움직이 자마자 이미지에 많은 쓰레기가 있습니다. 이미지 키는 10 초마다 잘 수신되지만 그 동안 일반 컴퓨터의 스트림과 비교하여 충분하지 않습니다.

또한 제공된 "캡처" 유틸리티 를 사용하여 비글 본에 대해 설명방법 을 시도했습니다 . 실제 컴퓨터에서 스트리밍하는 경우 라즈베리 파이에서 스트리밍하는 경우 동일한 가비지 문제가 발생합니다.

그것은 네트워크 문제가 아닙니다 : Wireshark와 VLC 통계를 사용하여 네트워크 검사를했는데 패킷 손실이 없습니다. Raspbian 및 Raspi for Archi (Raspbian의 gstreamer 0.10, Arch Linux의 gstreamer 1.0)를 사용해 보았습니다.

관련성이 있는지 여부는 알 수 없지만 Raspbian의 소프트 플로트 지원 버전으로 테스트했습니다. 3.2 커널을 사용하려면 먼저 업데이트를 수행해야합니다. 그러나 같은 문제로, 비디오에는 약간의 쓰레기가 있습니다.

비디오 품질을 향상시키기 위해 무엇을 할 수 있는지에 대한 아이디어가 있습니까?


프레임 속도를 줄이십시오. rPi의 CPU는 매우 열악하므로 30FPS에서 800x600 이미지를 전송하는 것이 너무 많은 것 같습니다. USB 대신 MIPI / CIS 커넥터를 통해 연결된 새로운 rPI 카메라 보드 만 15-30 FPS에서 1080p를 스트리밍합니다.
Matthias

FPS가 아닙니다. Pi는 Pi 카메라 모듈을 사용하여 60FPS에서 HD를 문제없이 처리 할 수 ​​있습니다. Logitech 카메라가 H264 비디오를 이미 인코딩 한 경우 Pi는 이미 인코딩되어 있으며 Pi는 패킷을 다시 캐스트해야합니다. 실제로 최대 6 개의 HD @ 25FPS 스트림을 다시 브로드 캐스트 할 수 있습니다. 패킷을 손상시키는 V4L 드라이버 여야합니다
Piotr Kula

나는 그것이 오래된 실이라는 것을 알고 있지만 마침내 작동하는 것을 찾았습니까? 비슷한 일을하려고 노력하고 있습니다
Ajith

나는 비글 본을 사용했고 더 잘 작동했습니다. 문제는 Raspbian의 RaspberryPi 용 USB 드라이버가 잘못 되었기 때문입니다. 내가 기억하는 한, 나중에 나중 버전의 Raspbian으로 동일한 시스템을 테스트했으며 쓰레기가 적었습니다. 나는 답 중 하나에서 말한 것처럼 rpi 업데이트를 할 수 있지만 잘 기억하지 못합니다. 그러나 확실한 것은 업데이트 된 펌웨어 / 운영 체제를 사용한 후 성능이 개선되었다는 것입니다.
Vincent Hiribarren

빈센트, 'v4l2 URL을 열 수 없습니다'오류가 발생합니다. 이 명령이 이제 오래 되었습니까?
dalanmiller 2015 년

답변:


5

나는 같은 문제가 있었는데 c920 문제가 아닌 하드웨어 인코더를 검색 할 때이 스레드를 발견했습니다.

그럼에도 불구하고, 라즈베리 파이에 대한 펌웨어 업데이트를 실행하면 쓰레기가 없어야합니다

$> sudo rpi-update

나는 스스로 해결책을 찾았다 : http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi


이 질문을 끝내기 위해 나는 그 대답을 받아들입니다. USB 드라이버가 손상되어 USB 통신에 패킷 손실이 발생했습니다. 업데이트 된 시스템 / 펌웨어가 트릭을 수행해야합니다.
Vincent Hiribarren

2

FFMPEG를 사용해 볼 수 있습니다. 그러나 문제는 저장소 버전이 오래되어 사용하지 않는 것입니다. 정말 잘 작동하는 분기 버전이 있습니다.

5 시간 정도 걸리거나 미리 컴파일 된 바이너리를 다운로드해야합니다.

그런 다음이 설정을 사용하여 V4L 드라이버에서 FFMPEG로 데이터를 파이프 할 수 있습니다. 어디 -i "fifo"바로해야 -i, 파이프로 연결된 스트림을 caputre하고 -f어떻게 출력 H264 그것을 한 번 확인해야합니다. FLV는 HTML 플레이어와 함께 재생할 수있는 FLV로 다시 패키지합니다.

ffmpeg -y \  
  -f h264 \  
  -i "$fifo" \  
  -c:v copy \  
  -map 0:0 \  
  -f flv "$urllocal"   

또는 V4L을 직접 대상으로하지만 oyu가 /dev/video* * 1이상인 위치에 카메라가 있어야한다는 것을 발견했습니다 .

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 out.avi

-f출력 할 형식을 나타냅니다. H264와 같이 FLV를 코드 변환하여 FLV 형식으로 래핑한다는 의미는 아닙니다. 그런 다음 클라이언트 VLC 플레이어로 주소를 변경하십시오. 예를 들어-f mpegts udp:192.168.1.19:1234

VLC는 Pi에서 제대로 작동하지 않는 것 같습니다. UDP를 사용하여 Pi cmaera 모듈을 PC로 푸시하는 데 거의 성공하지 못했습니다. 작동했지만 안정적이지 않았습니다.

또한 rtmp 모듈과 함께 nginx 설치를 살펴볼 수도 있습니다. 이 안내서 를 보시지 만 설정을 약간 조정해야합니다. 그런 다음 VLC 플레이어를 nginx-rtmp 스트림에 연결하면 매력처럼 작동합니다.


1
어떤 포크 버전이 잘 작동합니까?
Brian

1

이것은 적어도 나를 위해 작동하는 것 같습니다 ... cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy


0

비디오를 표시하는 클라이언트에서 더 큰 버퍼로 시도하십시오. 저에게는 1000ms 버퍼와 200ms 버퍼 사이에 극적인 차이가 있습니다. 5000ms 버퍼는 1000ms 버퍼보다 ​​낫습니다.

: 네트워크 캐싱 = 2000


LAN에서 이상한 지 터링으로 0 캐싱으로 작동해야합니다 .Pi 카메라 모듈이 문제없이 작동하도록했습니다.
Piotr Kula

0

V4L2 드라이버에서 H264를 캡처 하는 live555 기반의 경량 RTSP 서버를 사용하여 라즈베리 포럼 에서 가능한 솔루션을 게시했습니다 . github h264_v4l2_rtspserver 에서 사용 가능

이것은 raspicamera를 위해 수행되었지만 H264를 제공하는 모든 V4L2 장치에서 작동합니다.


-1

상황을 잘 이해했다면 Raspberry에서 비디오를 H264로 트랜스 코딩 하시겠습니까? VLC가 소프트웨어 인코딩을 사용하고 있으며 Raspberry가 해당 작업에 강력하지 않기 때문에 성능이 저하되는 이유가 여기에 있습니다.

Gstreamer 및 gst-omx플러그인 을 사용해 보는 것이 좋습니다 . Raspberry에서 좋은 서버를 만드는 하드웨어 비디오 인코딩 요소가 있습니다.


1
그가 말했듯이 Logitech 카메라는 이미 H.264를 제공합니다. 따라서 rPi는 프레임 만 전송하지만 인코딩은 수행하지 않습니다.
Matthias

그는 트랜스 코딩하지 않습니다. 데이터를 재방송하십시오. 마찬가지로 스트림을 직접 사용합니다.
Piotr Kula
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.