一、音视频开发概述

教程适用场景

  • 无人机
  • 音视频直播
  • 安防,楼宇对讲,智能家居,车载设备
  • 视频会议系统
  • 一切和摄像头相关的电子设备
  • FFmpeg tcp/udp网络通信

Android芯片供应商,视频采集和平台关系较大

  • 高通系列 稳定性好,价格贵,开发门槛高
  • 三星系列 一般自用,开放性差
  • 全志系列 价格低,稳定性差,性能强悍
  • 瑞芯微rk系列 价格低,性能一般
  • 其他MTK,展讯

Android视频采集

  • 方案一:Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口
  • 方案二:通过Android的MediaRecorder,在setoutputFile函数中绑定Localsocket实现(效率较低,一般不建议使用)
  • 方案三:通过芯片方案商提供的接口获取视频

Android视频编码一般有两种方式,软件编码---ffmpeg,硬件编码---MediaCodec编码(兼容性不好,5.0以后才能使用,格式要求比较严格)

Android视频传输,自定义协议

  • 发送视频数据包结构一般是:视频头 + 视频数据
  • 视频头一般包含:帧序号 + 时间戳 + 帧类型 + 该包视频数据的大小
  • UDP需要分包处理,I帧需要分十几个包来发送(视网络情况而定),每个包的大小建议在1024kb,每个包含有包序号、接收的时候把这些包按照顺序组合起来,形成一帧数据进行解码
  • 当I帧和I帧之间的P帧有丢掉时,需要忽略掉剩下的P帧,等待下一个I帧,才能开始解码,不然会有马赛克出现
  • 当发现丢包时也可以告诉服务器重新发I帧过来,这样就可以不用到等待了

Android视频解码和编码一样有两种方式,ffmpeg和MediaCodec,建议使用ffmpeg来解码,因为解码一般在手机端,兼容性要求比较高

Android视频转换,视频解码后的数据都是YUV420的数据,而视频显示的时候有时候会需要RGB565的数据,这时候就需要视频格式转换了。这里需要注意的一点是,YUV420有两种不同的格式,planar类和packed类,所以在转换的时候要注意格式是否正确无误

Android视频显示

  • Bitmap视频更新

    • 传入的数据必须转换成RGB,效率较低
  • Opengl视频更新

    • 传入的YUV420可以直接显示,效率高

你可能感兴趣的:(一、音视频开发概述)