一、技术关键点
1. 音频采集:设置合理的采样参数,包括采样率、通道数、采样深度。
2. 视频采集:手机摄像头采集输出的格式(NV12/NV21/YV12),要注意相互间的转换,以及采集出来图像的方向应该根据那种策略进行旋转,尤其在android设备需要做更多的兼容性测试。
3. 编码和解码:熟悉的使用ffmpeg可以方便我们快速完成视频编解码的功能,但是这种方式会过多的消耗CPU而使得性能大大降低,因此采用硬编码通过GPU加速可以提升一个档次;需要注意的是IOS的硬编码兼容性会远大于Android的硬编码,所以在Android设备上做硬编码同样要采用一个有效的策略,提高其兼容性;硬解码整体的兼容性问题会少很多;
4. 协议以及网络传输:对于标准协议,用的相对较多的是RTSP/RTMP/SIP,这三种属于应用交互层的协议;在完成交互协议之后,才会使用到传输协议(TCP/UDP/RTP)
5. 技术延伸:包括点对点传输、后期视频特效处理、图像识别;
二、相关开源项目
https://github.com/FFmpeg/FFmpeg
https://github.com/BelledonneCommunications/linphone
https://github.com/asterisk/pjproject
https://github.com/appunite/AndroidFFmpeg
https://github.com/Bilibili/ijkplayer
https://github.com/cisco/openh264