2011-09-21 3 views
3

내 머리가없는 우분투 서버 (Maverick 10.10 실행)에 연결된 웹캠에서 비디오 및 오디오를 스트리밍하려고합니다. WebM 형식 (VP8 비디오 + OGG)으로 스트리밍 할 수 있기를 원합니다. 대역폭이 제한되어 있으므로 스트림이 1Mbps 미만이어야합니다.WebM 형식의 Ubuntu 서버에서 오디오가있는 명령 줄 스트리밍 웹캠

나는 FFmpeg를 사용해 보았습니다.

ffmpeg -s 640x360 \ 
-f video4linux2 -i /dev/video0 -isync -vcodec libvpx -vb 768000 -r 10 -vsync 1 \ 
-f alsa -ac 1 -i hw:1,0 -acodec libvorbis -ab 32000 -ar 11025 \ 
-f webm /var/www/telemed/test.webm 

그러나 VSYNC와 비동기 옵션의 모든 방식을 실험에도 불구하고, 나도 동기화 오디오 나가, 또는 베니 힐 스타일의 빨리 감기 비디오 수 있습니다 : 나는 다음과 웹캠에서의 WebM 비디오를 녹화 할 수 있어요 빠른 오디오와 일치합니다. 나는 또한 ffserver (test.webm 경로와 파일 이름을 관련 피드 파일 이름으로 대체 함)로 실제로이 작업을 수행 할 수 없습니다.

목표는 오픈 소스 구성 요소만을 사용하여 엄격한 대역폭으로 최신 브라우저에서 볼 수있는 라이브 + 오디오 + 비디오 피드를 얻는 것입니다. (해당 MP3 포맷의 법적 채프 없음)

질문 : 따라서 웹을 통해 웹캠에서 스트리밍 webm을 동기화하는 방법은 무엇입니까? 어떤 소프트웨어를 사용합니까?

FFmpeg를 통해 동기화 된 오디오가있는 웹캠에서 webm 인코딩에 성공 했습니까? 그렇다면 어떤 명령을 내 렸습니까?

FFmpeg + FFserver를 사용하면 그만한 가치가 있습니까? 아니면 다른 적합한 명령 줄 도구 (예 : 너무 잘 인코딩되지 않는 VLC)가 있습니까?

Gstreamer + flumotion과 같은 것이 명령 줄에서 구성 할 수 있습니까? 그렇다면, flumotion doc이 명령 행 세부 사항에서 다소 가벼워서 어디에서 명령 행 문서를 찾을 수 있습니까?

미리 감사드립니다.

답변

0

flumotion을 시도해보십시오. flumotion-admin을 사용하여 웹캠에서 캡처하는 webm 파이프 라인을 쉽게 설정하고 백그라운드에서 실행할 수 있습니다.

0

최근에 설정했지만 다소 고통 스럽습니다. 여기에 내가해야 할 일이있다 :

먼저 libvpx 드라이버를 포함하도록 소스에서 ffmpeg를 빌드한다. (당신이 가지고있는 버전을 사용하더라도, 이번 ​​달에 최신 버전이 필요하다. 전역 헤더를 포함하는 기능을 추가했습니다.) 우분투 서버와 데스크탑에서이 작업을 수행했으며, this guide은 다른 OS에 대한 지침 인 can be found here을 보여주었습니다.

적절한 버전의 ffmpeg/ffserver를 설치하면 스트리밍 용으로 설정할 수 있습니다. 제 경우에는 다음과 같습니다. 비디오 캡처 장치에

: 해당하는 "-f video4linux2 - 표준 NTSC -i/디바이스/video0"부 내 (입력 소스에 따라 변경 될

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm 
  • 비디오입니다 캡처 카드).

관련 ffserver.conf의 발췌 :

Port 8090 
#BindAddress <server_ip> 
MaxHTTPConnections 2000 
MAXClients 100 
MaxBandwidth 1000000 
CustomLog /var/log/ffserver 
NoDaemon 

<Feed 0.ffm> 
File /tmp/0.ffm 
FileMaxSize 5M 
ACL allow <feeder_ip> 
</Feed> 
<Feed 0_webm.ffm> 
File /tmp/0_webm.ffm 
FileMaxSize 5M 
ACL allow localhost 
</Feed> 

<Stream 0.mpg> 
Feed 0.ffm 
Format mpeg1video 
NoAudio 
VideoFrameRate 25 
VideoBitRate 256 
VideoSize cif 
VideoBufferSize 40 
VideoGopSize 12 
</Stream> 
<Stream 0.webm> 
Feed 0_webm.ffm 
Format webm 
NoAudio 
VideoCodec libvpx 
VideoSize 320x240 
VideoFrameRate 24 
AVOptionVideo flags +global_header 
AVOptionVideo cpu-used 0 
AVOptionVideo qmin 1 
AVOptionVideo qmax 31 
AVOptionVideo quality good 
PreRoll 0 
StartSendOnKey 
VideoBitRate 500K 
</Stream> 

<Stream index.html> 
Format status 
ACL allow <client_low_ip> <client_high_ip> 
</Stream> 
  • 참고 이것은 전술 FFmpeg은 명령을 실행하기 feeder_ip의 서버에 대해 구성되고, server_ip에 WEBM 대화에 MPEG을 (취급시 server_ip에서 서버 서버 client_high_ip 통해 client_low_ip하도록 아래 계속).

이 FFmpeg에 명령이 컴퓨터에서 실행되는 이전 server_ip라고도 (이것은 실제 MPEG 처리 -> WEBM 변환 및 다른 사료에 ffserver에 다시 공급)

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm 

일단 이들이 모두 시작되면 (ffserver, 그 다음에 feeder_ip ffmpeg 프로세스 그리고 나서 server_ip ffmpeg 프로세스) http : // : 8090/0.webm에서 라이브 스트림에 액세스하고 http에서 상태를 점검 할 수 있어야합니다 : // : 8090/

희망이 있습니다.