2013-07-23 1 views
1

RTP를 통해 로컬 저장된 오디오 파일 (예 : mp3)을 전송할 수 있습니까? 예 : 입력으로 받아 들여진 RTP 패킷으로 변환/포장되어 네트워크를 통해 전송되는 mp3 파일이 있습니다. 라이브러리, 솔루션 및 예제가 있습니까?RTP를 통해 로컬 저장된 오디오를 스트리밍하는 Android 라이브러리

감사합니다.

// 편집 : 내가하고 싶은 일은 SIP로 전화를 걸고 로컬 저장된 오디오 파일을 호출자에게 보내고 스트림하여 듣는 것입니다.

답변

1

섹션 5에있는 WebRTC solutions을 확인하십시오 .... 그걸로 일하지 않았지만 당신이하려는 일을 위해 만들어진 재단사처럼 들리 네요. 어쩌면 Ondello API를 사용하십시오.

OR

당신은 마이크 원료 스트림이고 마이크 원료 스트림 또는 출력 버퍼를 수신 버퍼에 백도어 (JNI 네이티브 코드)를 제공하는 SIP/RTP 접속의 세션을 구축 할 encoded to ... 이렇게하면 prerecord audio로 송신 측의 RTP 스트림을로드 할 수 있습니다.

SIP 세션 도중 해당 버퍼에 액세스 할 수 있으므로 오디오 파일의 메모리 내 버전에서 Xcopy하여 해당 스트림을 SIP 호출로 바꿀 수 있습니다. 통화 상대방은 마이크 내용이 아닌 오디오 파일의 오디오를 듣게됩니다.

SIP/RTP apis에서 성공하지 못했다면, SIP 연결을 처음부터 빌드하고 원하는 방식으로 버퍼를 스왑 할 수있게 해주는이 아주 좋은 Java 네트워킹 라이브러리를 확인할 수도 있습니다.

https://github.com/brunodecarvalho/effluxthread

옵션 2, 클라이언트 서버 (여기 req'd없는 JNI 네이티브 코드)

에 대한 내 대답은 보낸 사람의 오디오를 업로드하고 서버에서 서비스를 제공 참조 수신기로 RTSP로. 어떤 Youtube 비디오도 RTSP 클라이언트 용으로 인코딩되었지만 (여전히있을 수 있음) 상당히 유명한 서버 대 안드로이드 미디어 플레이어 시나리오입니다. 나는 이것이 SDP와 같은 파일의 설명과 세션의 로그라고 생각합니다 ...

D/chooseit(6854): Session Descriptor 
D/chooseit(6854): v=0 
D/chooseit(6854): o=GoogleStreamer 1263099257 1890734730 IN IP4 74.125.213.247 
D/chooseit(6854): s=Video 
D/chooseit(6854): c=IN IP4 0.0.0.0 
D/chooseit(6854): b=AS:51 
D/chooseit(6854): t=0 0 
D/chooseit(6854): a=control:* 
D/chooseit(6854): a=range:npt=0-63.800000 
D/chooseit(6854): m=video 0 RTP/AVP 98 
D/chooseit(6854): b=AS:39 
D/chooseit(6854): a=rtpmap:98 H263-2000/90000 
D/chooseit(6854): a=control:trackID=0 
D/chooseit(6854): a=cliprect:0,0,144,176 
D/chooseit(6854): a=framesize:98 176-144 
D/chooseit(6854): a=fmtp:98 profile=0;level=10 
D/chooseit(6854): m=audio 0 RTP/AVP 99 
D/chooseit(6854): b=AS:12 
D/chooseit(6854): a=rtpmap:99 AMR/8000/1 
D/chooseit(6854): a=control:trackID=1 
D/chooseit(6854): a=fmtp:99 octet-align 
D/chooseit(6854): Got response: 
D/chooseit(6854): RTSP/1.0 200 OK 
D/chooseit(6854): Content-Type: application/sdp 
D/chooseit(6854): Cache-Control: must-revalidate 
D/chooseit(6854): Date: Wed, 28 Sep 2011 17:27:22 GMT 
D/chooseit(6854): Expires: Wed, 28 Sep 2011 17:27:22 GMT 
D/chooseit(6854): Last-Modified: Wed, 28 Sep 2011 17:27:22 GMT 
D/chooseit(6854): Content-Base: rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp/ 
D/chooseit(6854): CSeq: 0 
D/chooseit(6854): Server: Google RTSP 1.0 
D/chooseit(6854): Content-Length: 406 
D/chooseit(6854): 
D/chooseit(6854): for the request: 
D/chooseit(6854): DESCRIBE rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp RTSP/1.0 
D/chooseit(6854): CSeq: 0 
D/chooseit(6854): Accept: application/sdp 
D/chooseit(6854): User-Agent: RTSPClientLib/Java 
D/chooseit(6854): 
D/chooseit(6854): Got response: 
D/chooseit(6854): RTSP/1.0 200 OK 
D/chooseit(6854): Session: 328393bf;timeout=90 
D/chooseit(6854): Transport: RTP/AVP;unicast;mode=play;client_port=49060-49061;server_port=10580-10581;source=74.125.213.247;ssrc=55922C32 
D/chooseit(6854): Cache-Control: must-revalidate 
D/chooseit(6854): Date: Wed, 28 Sep 2011 17:27:22 GMT 
D/chooseit(6854): Expires: Wed, 28 Sep 2011 17:27:22 GMT 
D/chooseit(6854): Last-Modified: Wed, 28 Sep 2011 17:27:22 GMT 
D/chooseit(6854): CSeq: 1 
D/chooseit(6854): Server: Google RTSP 1.0 
D/chooseit(6854): 
D/chooseit(6854): for the request: 
D/chooseit(6854): SETUP rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp/trackID=1 RTSP/1.0 
D/chooseit(6854): CSeq: 1 
D/chooseit(6854): Transport: RTP/AVP;unicast;client_port=49060-49061 
D/chooseit(6854): User-Agent: RTSPClientLib/Java 
D/chooseit(6854): 
D/chooseit(6854): using client IP addr 192.168.1.125 
D/chooseit(6854): remote ssrc 1435642930 
D/chooseit(6854): raw parms 49060 10580 74.125.213.247 
D/chooseit(6854): session: 328393bf 
D/chooseit(6854): transport: client_port=49060-49061 server_port=10580-10581 source=74.125.213.247 ssrc=55922C32 
D/chooseit(6854): Got response: 
D/chooseit(6854): RTSP/1.0 200 OK 
D/chooseit(6854): Session: 328393bf;timeout=90 
D/chooseit(6854): Range: npt=0.000-63.800 
D/chooseit(6854): RTP-Info: url=rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp/trackID=1;seq=9498;rtpt 
ime=958652148 
D/chooseit(6854): CSeq: 2 
D/chooseit(6854): Server: Google RTSP 1.0 
D/chooseit(6854): 
D/chooseit(6854): for the request: 
D/chooseit(6854): PLAY rtsp://v8.cache8.c.youtube.com/CigLENy73wIaHwlcw_gs85OUchMYDSANFEgGUgx1c2VyX3VwbG9hZHMM/0/0/0/video.3gp RTSP/1.0 
D/chooseit(6854): CSeq: 2 
D/chooseit(6854): Session: 328393bf;timeout=90 
D/chooseit(6854): Range: npt=0.000- 
D/chooseit(6854): User-Agent: RTSPClientLib/Java 
+0

답변 해 주셔서 감사합니다. interresing하는 소리가납니다. 나는 너의 연결을 검사 할 것이다. 너 그런 식으로 한거야? MjSip으로 전화를 걸었습니다. 이 마이크 버퍼를 얻으려면 어떻게해야합니까?efflux API로 작업하고 그것을 사용하는 방법에 대한 힌트/예제를 제공 했습니까? – B770

+1

'efflux'에서 테스트 폴더에 예제를 시험해보십시오. –

+0

나는 그것을 보았지만 아무런 설명이나 의견이 없다. 그래서 나는 실제적으로이 샘플들을 사용하는 방법을 모르겠다. – B770

2

Android API에 android.net.rtp을 사용할 수 있습니다.

+0

당신의 대답은 Thx입니다. 하지만 안드로이드 API가 마이크의 입력만을 받아들이는 것이 아닌가? 로컬 파일을 스트리밍하려면 어떻게해야합니까? – B770

+1

하드웨어 및 API의 상호 작용에 대한 예는 'audiotrack'의 '쓰기'문 ... http://developer.android.com/reference/android/media/AudioTrack.html –

+1

PBX에서 메시지 재생 다시 SIP 전화 시스템에서 당신에게, 같은 종류의 일. msg 인 파일에서 스트리밍하기. 따라서 파일에 어떻게 든 가져와 메모리에 매핑 한 다음 협상 된 RTP를 준수하는 인코딩을 사용하여 인코딩 된 스트림을 RTP 연결로 공급해야합니다. –

관련 문제