2010-04-26 9 views
3

두 개의 Linux 머신간에 실시간 오디오를 이동해야합니다. 둘 다 Gstreamer 위에 구축 된 사용자 정의 소프트웨어 (광산)를 실행하고 있습니다. (이 소프트웨어는 이미 별도의 TCP 기반 프로토콜을 통해 다른 컴퓨터간에 통신하고 있습니다. 신뢰할 수있는 대역 외 데이터를 사용하면 솔루션에 차이가 있습니다.GStreamer를 사용하여 로컬 네트워크를 통해 오디오 이동

오디오 입력은 송신기의 마이크/라인 입력이되고 대상의 싱크대는 일반 오디오 출력이됩니다. alsasrc와 alsasink가 가장 가능성이 높습니다. 테스트를 위해 실제 마이크 대신 audiotestsrc를 사용하고 있습니다.

GStreamer는 RTP, RTSP, GDP 페이로드, UDP 및 TCP 서버, 클라이언트 및 소켓 등 네트워크를 통해 데이터를 이동하는 다양한 방법을 제공합니다. 웹에는 오디오와 비디오 모두를 스트리밍하는 많은 예가 있지만 실제로는 그 중 아무 것도 실제로는 작동하지 않습니다. 대상 파이프 라인에서 대문자 협상에 실패하거나 단일 패킷을 듣고 파이프 라인이 정지되거나 사용 가능한 데이터가 없으면 대상 파이프 라인이 즉시 중단됩니다.

모든 경우에 gst-launch 만 명령 줄에서 테스트하고 있습니다. 오디오 데이터의 압축은 필요하지 않습니다. 원시 오디오 또는 사소한 WAV, uLaw 또는 aLaw 인코딩은 정상입니다. 더 중요한 것은 낮은 대기 시간입니다.

+1

오류를 생성 할뿐만 아니라, 어떠한 출력을 생성하지 않고 파이프 라인의 예를; 대상 파이프 라인이 PLAYING 상태가되지만 소리가 들리지 않습니다. 소스 파이프 라인 : gst-launch-0.10 audiotestsrc! audioconvert! rtpL16pay! udpsink port = 5005 host = localhost 대상 파이프 라인 : gst-launch-0.10 udpsrc port = 5005! rtpL16depay! alsasink –

답변

4

이 문제의 종류를 디버깅하기 위해 내가 시도 할 것 :.

  1. 실행 gst-launch audiotestsrc ! alsasink 소리를 checkthat하기는 볼
  2. 사용하십시오 fakesink 또는 filesink를 작동 우리가 볼 수
  3. 사용 와이어 샤크를 GST_DEBUG와 파이프 라인 문제를 찾을 수 GST_DEBUG=GST_CAPS:4에 예를 체크 모자 또는 모든 오류를 얻기 위해 사용 *:2을 확인/경고 어떤 버퍼를
  4. 시도를 얻을 경우 패킷

를 전송하는 경우 이 파이프 라인은 나를 위해 작동 :

RTP와 함께 :

gst-launch-0.10 -v udpsrc port=5000 ! "application/x-rtp,media=(string)audio, clock-rate=(int)44100, width=16, height=16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-positions=(int)1, payload=(int)96" ! rtpL16depay ! audioconvert ! alsasink sync=false 

gst-launch-0.10 audiotestsrc ! audioconvert ! audio/x-raw-int,channels=1,depth=16,width=16,rate=44100 ! rtpL16pay ! udpsink host=localhost port=5000 
TCP와

: :

gst-launch-0.10 tcpserversrc host=localhost port=3000 ! audio/x-raw-int, endianness="(int)1234", signed="(boolean)true", width="(int)16", depth="(int)16", rate="(int)44100", channels="(int)1" ! alsasink 

gst-launch-0.10 audiotestsrc ! tcpclientsink host=localhost port=3000 
+0

Windows에서 오디오 샘플을 사용하여 수신기 예제가 작동하는 것처럼 보일뿐입니다. "...! rtpL16depay! audioconvert! audioresample! directsoundsink" – OJW

1

시도한 gst 실행 파이프 라인을 게시 할 수 있습니까? 그것은 왜 당신이 문제를 가지고 있는지 이해하는데 도움이 될 수 있습니다. 일반적으로 RTP/RTSP는 꽤 쉽게 작동합니다.

편집 : 내가 생각할 수있는 커플 항목은 = 어디 다른 리눅스 머신의 실제 IP 주소 2. 추가 캡 = "응용 프로그램/X-RTP 미디어를 호스트 1. 변경 호스트 = localhost입니다 수신기에서 udpsrc 요소에 = (문자열) 오디오

0

내 솔루션은 tilljoel 매우 유사하지만, 나는 소스로 (당신이 필요하다) 마이크를 사용하고 - gstreamer를 파이프 라인에 따라서 일부 조정.

gst-launch-0.10 tcpserversrc host=localhost port=3000 ! audio/x-raw-int, endianness="(int)1234", signed="(boolean)true", width="(int)16", depth="(int)16", rate="(int)22000", channels="(int)1" ! alsasink 
마이크

인코딩 오디오 이용한 TCP :

gst-launch-0.10 pulsesrc ! audio/x-raw-int,rate=22000,channels=1,width=16 ! tcpclientsink host=localhost port=3000 
마이크

디코딩 오디오 사용 RTP :

gst-launch-0.10 -v udpsrc port=5000 ! "application/x-rtp,media=(string)audio, clock-rate=(int)22000, width=16, height=16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-positions=(int)1, payload=(int)96" ! rtpL16depay ! audioconvert ! alsasink sync=false 
,369

마이크

디코딩 오디오 TCP를 사용 1,363,210 RTP 사용 마이크

인코딩 오디오 : 여기

gst-launch-0.10 pulsesrc ! audioconvert ! audio/x-raw-int,channels=1,depth=16,width=16,rate=22000 ! rtpL16pay ! udpsink host=localhost port=5000 
+0

Gstremer와 같은 다른 포트에서 오디오를 수신 할 수 있습니까? 5001 포트 –

+0

@DURGESHKUMAR 당신은 분명히 demux를 사용해야 할 것입니다. https://stackoverflow.com/questions/13904975/combining-an-audio-and-video-stream-using-gstreamer – enthusiasticgeek

+0

에서 backend.m 파일을 보낼 수 있습니까? –

관련 문제