FFMPEG를 사용한 라이브 오디오 스트림


14

ffmpeg외부 USB 마이크를 사용하여 라이브 오디오를 스트리밍하려고합니다 . 나는이 튜토리얼을 거의 따랐다.

몇 가지 단계를 조정해야했지만 마침내이 명령을 사용하여 랩톱 스트림을 수신했습니다.

ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234

CPU가 100 %에 가까워서 2 초 동안 나쁜 소리가 나고 아무 것도 없습니다 ... Wireshark에서 보드가 지속적으로 프레임을 보내는 것을 봅니다.

CPU 사용량을 줄이려는 사람이 있습니까?


오버 클로킹 및 다른 메모리 분할을 살펴볼 수 있습니다. 코덱을 선택할 수 있으면 전환하여 약간의 향상을 달성 할 수 있습니다. 스트림의 압축을 조사하고 싶을 수도 있습니다 (이것은 제로 이득 일 수도 있음). 전송 시간에서 얻은 모든 것이 압축에서 손실 될 수 있습니다.
— Steve Robillard

로컬 파일에 먼저 쓰려고 했습니까? 1) 웨이브 파일로 실시간 기록, 2) mp3 파일로 실시간 기록 3) 네트워크를 통한 스트리밍 스트리밍
— pixelistik

지금은 아닙니다. 완전 자동 ffmpeg 대신 수동으로 모든 단계를 수행하는 것이 복잡해 보입니다. ;-)
— hotips

무엇을 녹음하고 있습니까?
— Alex Chamberlain

1
이더넷 베이비 폰을 만들려고합니다
— hotips

답변:


7

특정 질문에 대답하기 위해 레코드를 ffmpeg로 파이프하여 CPU를 줄일 수 있습니다.

arecord -f cd -D plughw:1,0 | ffmpeg -i - -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://234.5.5.5:1234

plughw : 1,0을 특정 사운드 카드로 교체해야합니다. 정보는 arecord -l을 참조하십시오. 내 Rasp Pi에서는 ~ 95 % CPU에서 ~ 35 %로 변경되었습니다.


6

ALSA 입력

대안은 ALSA를 이용하는 것입니다. 위와 비슷한 명령은

ffmpeg -ac 1 -f alsa -i hw:0,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://localhost:1234

이것이 CPU 사용량에 어떤 영향을 미치는지 잘 모르겠습니다.


ffmpeg -ac 1 -f alsa -i hw : 1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp : //192.168.1.116 : 1234 그러나 ffmpeg는 몇 초 후에 충돌합니다. 0x7a1510] ALSA 버퍼 xrun. 다른 아이디어?
— hotips

나는 ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp : //192.168.28.116 : 1234를 테스트했지만 소리는 매우 나쁘다 ... 지연 시간은 약 6 초입니다. 더 나은 솔루션을 가질 생각이 있습니까?
— hotips

1
@ si2w mp3의 32k는 약간의 농담이라고 생각합니다. 그것을 위로하거나 다른 코덱을 사용해보십시오. 전화 기용으로 설계된 G2xx 시리즈 중 하나
— Alex Chamberlain

3

이것은 작동하고 CPU 사용량을 줄입니다.

ffmpeg -f alsa -i default:CARD=U0x46d0x819 -acodec mp2 -ac 1 -re -f rtp rtp://234.5.5.5:1234 2> /tmp/mylog.log &

default : CARD = U0x46d0x819를 마이크 ID (record -l에서 획득)로 바꾸거나 cad를 지정해야합니다 -i hw:0,0 (또는 장치)을 지정하십시오.

나는 mp3 인코딩이 CPU 전력의 90 % 이상을 차지하고 오디오를 따라 잡을 수 없다는 비슷한 문제가 있었으므로 mp2 인코딩으로 변경했습니다. 이것은 약 15-18 %의 CPU를 사용 top했고 (vi 측정 ) LAN에서 VLC로 부드럽게 스트리밍됩니다. 완벽한 베이비 모니터 또는 무엇이든 만들 것입니다. VLC 측의 버퍼링 인 1 초 정도의 지연이 있습니다.

참고 : ip 주소는 멀티 캐스트 주소 ([224-239] .xyz)입니다. LAN의 특정 네트워크 장치를 대상으로하지 않아도되며 광대역 라우터는 기본적으로 트래픽을 로컬로 유지합니다.


2

당신은 크게 (입력 장치의 오디오 샘플 레이트를 감소시킴으로써 CPU의 부하를 줄일 수있다 -ar 8000 전에 -f alsa 128K로 오디오 코덱 비트 레이트)를 설정하고 ( -b:a 128k). 또한 아이러니하게 채널 수 ( -ac 1)를 줄이면 CPU 부하가 증가하는 것처럼 보였으 므로이 명령은 매우 낮은 CPU에서 실행됩니다.

ffmpeg -ar 8000 -f alsa -i hw:0 -acodec mp2 -b:a 128k -f rtp rtp://other:4444

기억해야 할 것은 사용하려는 캡처 하드웨어의 기능과 ffmpeg / avconv의 버전에 달려 있다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.