Android库通过RTP流式传输本地存储的音频

时间:2013-07-23 20:13:37

标签: java android audio streaming rtp

是否可以通过RTP传输本地存储的音频文件(例如mp3)?例如。有一个mp3文件作为输入并转换/打包成RTP数据包并通过网络发送。 有没有图书馆,解决方案,例子?

谢谢!

//编辑:我想要做的是用SIP拨打电话,然后将本地存储的音频文件发送/流式传输到被叫方,以便他能听到。

2 个答案:

答案 0 :(得分:2)

您可以使用Android API中的android.net.rtp

答案 1 :(得分:1)

在第5部分检查可能的WebRTC solutions ....没有使用它,但听起来像是为你想要做的事情量身定做的。也许使用Ondello api。

OR

您必须为SIP / RTP连接构建会话,为接收Microphone原始流的缓冲区或麦克风原始流编码为的输出缓冲区提供后门(JNI和本机代码)。这样你可以使用预先录制的音频在发送方加载RTP流。

通过访问该缓冲区,在SIP会话的中间,您可以从内存版本的音频文件中进行Xcopy,将该流交换到SIP呼叫中。通话另一端的一方将听到音频文件中的音频,而不是麦克风内容。

如果没有SIP / RTP apis成功,您还可以查看这个非常好的java网络库,它允许您从头开始构建SIP连接,并以任何方式交换缓冲区。

https://github.com/brunodecarvalho/efflux

请参阅此thread

的答案

选项2,客户端服务器(此处不需要JNI本机代码)

从发件人上传音频,并将其作为RTSP从服务器提供给接收者。任何Youtube视频曾经(仍然可能)为RTSP客户端编码,并且是众所周知的服务器到Android媒体播放器场景。我相信这是这样一个文件的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