把Android 采集的音频,通过RTP推送到远程进行实时播放
2017-10-11 本文已影响192人
浅吟且行的时光
主要步骤
- 通过AudioRecord采集音频数据
- 把采集的音频写入文件通过AudioTrack进行播放
- 把采集的数据包加RTP头,通过udp发送到远程
- 可以用vlc对接收到的数据进行实时播放
注意事项
- 权限添加(android6.0及以上系统需要动态申请录音,读写文件的权限)
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET"/>
- 确保RTP添加头的12个字节的准确性(尤其时间戳,序列号,载荷类型,端序问题),可以参考http://blog.csdn.net/bripengandre/article/details/2238818
- 16bit采样,发送到pc端要进行大小端转换
- vlc播放,sdp文件编写:(详细说明参考:http://www.mikewootc.com/wiki/net/protocol/rtsp.html#sdp协议概述)
v=2
o=- 15944158611390545897 15944158611390545897 IN IP4 bogon
s=Unnamed
i=N/A
c=IN IP4 192.168.8.121
t=0 0
a=tool:vlc 2.2.6
a=recvonly
a=type:broadcast
a=charset:UTF-8
m=audio 1234 RTP/AVP 96
b=AS:192
b=RR:0
a=rtpmap:96 L16/48000/2
- 录音噪音的问题(主要有录的噪音,发送的噪音这两种。录的噪音可以参考:http://www.bijishequ.com/detail/313446?p=,发送后产生的噪音,要确保添加RTP头的12个字节的准确性)
- 实时播放延时问题 (用客户端发给vlc播放,时间越长延时越大,自己写一个服务器接收不会出现越来越大的延时)
其他
- 播放RTP流,直接去掉收到的每一帧数据的前十二个字节,直接丢到播放器里进行播放。