安卓网络电话:源码解析与功能实现

这款网络电话源码值得一看!它清晰展示了代码结构,并实现了SIP协议栈、软电话功能以及STUN相关功能。默认音频编码格式为G711 A律。

你可以直接使用Ant Debug编译程序,但这样只能支持A律和U律两种音频编码。若需使用其他编码格式,则要通过NDK导入。

如果对方终端支持视频通话(例如Linphone),你可以使用以下功能:

* 保持通话

* 静音

* 转移通话

* 发送视频

* 挂断

注意: 目前只能发送视频,无法接收对方视频。

如果对方终端不支持视频通话(例如Yate),你可以使用以下功能:

* 保持通话

* 静音

* 转移通话

* 挂断

该源码实现了视频捕获、发送和接收功能。你可以播放网络传输的音频数据,录制本地音频数据,并提取视频流中的位图进行显示。

由于该服务是无连接的包投递服务,客户端和服务器之间并不会建立连接。服务器只是开放端口接收数据,有数据就接收,没有就阻塞。

双向视频通话也是通过数据报包实现的,只需要知道数据报包的IP地址和端口号即可。

你可以直接从MediaRecord生成的视频数据中提取H264/H263数据。这些数据已经过编码,可以通过内置的VideoView使用RTSP协议播放。也就是说,服务器会将RTP视频数据流封装成RTSP流传输给手机的VideoView进行播放,无需解码库。因此,开源代码中只有音频编码库,没有视频编码库。

实现该软件的最佳方法是利用Android的MediaRecorder实时提取H263/H264数据,然后通过RTP封装传输给RTSP服务器。这种实现方式最为理想,可以通过onPrewFrame获取预览帧编码。但无论采用哪种方式,都不可避免地会遇到延迟、丢帧等问题。

zip 文件大小:2.62MB