Android视频会议软件开发调研
最近公司要做基于视频的手机App游戏,类似于远程狼人杀或者远程会议(要各个玩家都露脸视频共享),所以要调研Android视频传输问题。
嗯,正文不用看了。结论:就是使用基于WebRTC封装的Licode.
如果用的不顺,会退回WebRTC开发。
Android-eye
源码地址
https://github.com/Teaonly/android-eye
特点
- 内置了Web服务(第三方可以直接输入IP:port进行视频查看)
- 支持H.264视频和G.726视频
- 通过WebSocket将视频播放到浏览器中
- 纯JS解码H.264和G.726视频
- 支持运动检测
- 可以支持高级图像处理算法
缺点
- DEMO不支持互联网
- 有一些出名的Issue没处理
iVideoChat
源码地址
https://code.google.com/archive/p/android-recorder/
https://download.csdn.net/download/xiaoliouc/4933594
原理
- 使用android中的AudioRecord类,获取原始PCM数据.
- 将PCM数据用speex编码.
- 将编码后的数据打包录制成flv文件.
- 使用android-rtmp-client库将编码,打包后的数据直接发布到流媒体服务器.
- 本地与服务器端录音同时进行.
- 在手机上通过rtmp协议回放服务器端录好的文件.
特点
- 使用RTMP协议
- 使用了 JUV-RTMP-CLIENT.jar 包
- 需要使用Flash player插件查看
缺点
- 并非实时视频
- 没有声音
- 里面的RTMP Client需要破解
CameraDemo
源码地址
http://download.csdn.net/detail/xiaoliouc/4933610
特点
- 使用的是Camera类
- 使用的是socket传输
- 简单直白容易学习
缺点
- 服务器端代码质量堪忧
- 帧率较低
- 不是工程级代码
- 开大量线程,性能不行
Live555
源码地址
https://github.com/rgaufman/live555
原理
- 使用Camera类拍摄视频,获取原始PCM数据
- 将获得的视频进行H264编码(使用x264库或opencore库)
- Java使用JNI调用C++的so文件
- 使用基于UDP的RTP/RTCP协议传输到服务器
- 服务器接收后,使用FFMPEG接收H264编码并播放
特点
- 工程级
- 扩展支持很好
缺点
- 要了解的知识点比较多,RTP/RTCP-over-TCP, RTSP视频服务器机制
- C++编写,量级很大
- JNI调用会比较麻烦
Spydroid-ipCamera
源码地址
https://github.com/fyhertz/spydroid-ipcamera
原理
- 手机通过MediaRecorder录制视频
- 直接在手机上搭建一个RTSP服务器,通过RTSP协议将数据发送到对方
特点
- 可以VLC读取视频流
- 可以配置流频率:视频H.263/H.264, 音频ARM/AAC
- 可以选择正反摄像头
- 自带一个微型服务器(很烂)
缺点
- 做C/S模式的话,需要额外拆掉RTSP服务器
Teameeting
源码地址
https://github.com/Teameeting/Teameeting-Android
https://github.com/Teameeting/Teameeting-ios
https://github.com/Teameeting/Teameeting-MsgServer
https://github.com/anyRTC/anyRTC-RTMP-OpenSource
特点
- 它的设计目的是视频直播房间
- 商业级代码,代码量级很大
- 支持最多4人高清视频群聊
- 支持消息推送
- 支持一键分享
- 支持离线消息保持
- 支持聊天室列表和保存
- 支持聊天室权限控制
缺点
- 缺失视频服务器代码
- 大量我们用不到的功能
StartRTC
源码地址
https://github.com/starrtc/starrtc-server
https://github.com/starrtc/starrtc-android-demo
https://github.com/starrtc/starrtc-ios-demo
https://github.com/starrtc/starrtc-windows-demo
资料站
https://docs.starrtc.com/zh-cn/docs/index.html
缺点
- 缺失服务器代码