音视频开发坑点总结(一)

1,792 阅读2分钟

1. 媒体约束设置 

  • audio 和Video 权限获取

  • 添加 videoSource audioSource  

  • 添加 audioTrack 和videoTrack

  • 设置 captureSession

  • 设置 video的 format device  fps

手机向下适配的话最好设置 AVCaptureSessionPreset640x480 fps 设置15  , 一般的设置的是AVCaptureSessionPreset1280x720甚至更高.

 这里的坑点是数值会影响视频的分辨率清晰度包括共享屏幕也会拉伸,放大所有也会拉伸,我们自己的处理是resolution rate大小他适配设置哪一个数值  

注意的是这里 这个很重要,你的黑屏有可能就是这里导致的

屏幕的填充方式

2. 前后置摄像头切换

  • CGAffineTransformMakeScale(-1.0,1.0)设置前后摄像头切换

  • AVCaptureDevicePositionFront  | AVCaptureDevicePositionBack

3. 切换听筒(receiver, earpiece)与扬声器(speaker)

4. 关闭所有远端音频

5. 关闭某一个音频

6.编码和解码 

  • 硬编码 优点: CPU消耗极低,解码效率极高 缺点: 要使用私有接口VideoToolBox
  • 软编码 : 缺点: 消耗CPU太大  比如iPhone4 -6 基本手机烫的要爆炸有时候会卡死 

硬编码:  不使用CPU进行编码,使用显卡(GPU)进行硬件加速,专用的DSP、FPGA、ASIC芯片等硬件进行编码(IOS  AudioToolbox  | Video ToolBox)

软编码: 使用CPU进行编码。编码框架ffmpeg+x264

由于手机发烫不得不进行硬编码和解码,如果技术比较厉害也可以H265最好他的优点如下:

  • 压缩比高,在相同图片质量情况下,比JPEG高两倍
  • 能增加如图片的深度信息,透明通道等辅助图片。
  • 支持存放多张图片,类似相册和集合。(实现多重曝光的效果)
  • 支持多张图片实现GIF和livePhoto的动画效果。
  • 无类似JPEG的最大像素限制
  • 支持透明像素
  • 分块加载机制
  • 支持缩略图

H264Decode

H264Encode

建议用硬编码 否则手机会烫的吓人哈哈.

7 PeerConnection:

offer Anwer ICE  DTLS STUN TURN 

DTLS:

8 拉流和推流(操作UI要放在主线程操作)

9 判断是否有摄像头在取否则你会崩溃 摄像头有可能对方是没有的比如PC端

  •  共享画面拉流和推流 共享画面后台运行 远端点击网页和其他APP影响

  • 视频录制

  • socket连接 重连 

  • socket 保活

  • 共享释放不掉的问题

  • 共享远端屏幕拉伸 iPad  iOS端 PC 端 适配

  • VOIP PushKit 

  • UserNotifications

回声消除 

用到的库主要是AEC (c ,c++)要混编 

WebRTC的AEC算法主要包括以下几个重要的模块:

  1. 回声延迟估计模块

  2. NLMS算法

  3. NLP非线性滤波

  4. CNG(comfort nosie generation)