一、音视频开发概述

教程适用场景

  • 无人机
  • 音视频直播
  • 安防,楼宇对讲,智能家居,车载设备
  • 视频会议系统
  • 一切和摄像头相关的电子设备
  • 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可以直接显示,效率高
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,143评论 25 709
  • ### YUV颜色空间 视频是由一帧一帧的数据连接而成,而一帧视频数据其实就是一张图片。 yuv是一种图片储存格式...
    天使君阅读 3,473评论 0 4
  • @徐鑫&耀庭 ——摄影大咖,舍你们其谁 WIFI,第一次听到,有人把自己定义为WIFI,想上就上的时候。心想,这款...
    Yolanda_yang阅读 215评论 0 0
  • 生死一瞬间, 天人永相别。 儿女空牵念, 留恨在人间。
    姝瑾儿阅读 391评论 4 7
  • 很少看这种专门写爱情的书籍,尤其到了现在快奔3的年纪,对爱情更是看的风轻云淡,生活不易,哪有时间风花雪月。 无意间...
    上善若水xsx阅读 165评论 0 0