1

是否可以通过 RTP 传输本地存储的音频文件(例如 mp3)?例如,将 mp3 文件作为输入并转换/打包成 RTP 数据包并通过网络发送。是否有任何库、解决方案、示例?

谢谢!

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

4

2 回答 2

2

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

于 2013-07-23T20:20:28.637 回答
1

在第 5 节中检查可能的WebRTC 解决方案......尚未使用它,但听起来像是为您尝试做的事情量身定制的。也许使用Ondello api。

或者

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

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

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

https://github.com/brunodecarvalho/efflux

在这个线程上查看我的答案

选项 2,客户端服务器(此处不需要 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
于 2013-08-01T14:40:56.940 回答