音视频blog笔记汇总

 移动端音视频从零到上手:https://juejin.cn/post/6844903889007820813
这篇文章是目录,列举了基本概念内容简单。重点是相关的link是代码实现,内容主要

 

================================================ 

音视频硬解码汇总

Video Recording Pipeline

音视频硬解码篇 二、音视频硬解码流程:封装基础解码框架

https://www.jianshu.com/p/ff65ef5207ce

小结:文章以step为主线,每个step都做了comments和实例说明,按照文章中的steps 走就行。
这节主要是类的设计:定义解码器:IDecoder,继承Runnable,定义音视频数据分离器IExtractor.
后面的章节就是IDecoder和IExtractor的具体实现.
解码流程:按照流程图实现
【解码步骤:1. 初始化,并启动解码器】
【解码步骤:2. 将数据压入解码器输入缓冲】
【解码步骤:3. 将解码好的数据从缓冲区拉取出来】
【解码步骤:4. 渲染】
【解码步骤:5. 释放输出缓冲】
【解码步骤:6. 判断解码是否完成】
【解码步骤:7. 释放解码器】

音视频硬解码篇 三、音视频播放:音视频同步

https://blog.csdn.net/cxpamcu/article/details/102404414

本文的题目不准确,主要内容是音视频的抽取和播放,次要才是音视频的同步。
音视频数据流分离提取器:MMExtractor封装Android原生提取器MediaExtractor, 即MediaExtractor的wrapper.
一、音视频数据流分离提取器
【1,初始化】
【2.1/2.2,获取音视频多媒体格式】
【3,提取数据】
  1)readBuffer(byteBuffer: ByteBuffer)
  2)selectSourceTrack() 通道切换
  3)然后读取数据:mExtractor!!.readSampleData(byteBuffer, 0)??
【4,释放提取器】
  封装音频和视频提取器
  定义的提取器模型 interface IExtractor
  视频提取器
  class VideoExtractor(path: String): IExtractor {
    //实现各种上篇blog中基类定义的接口
  }
 音频提取器
 class AudioExtractor(path: String): IExtractor {
    //实现各种上篇blog中基类定义的接口
 }
二、视频播放
生成数据提取器
配置解码器
初始化Surface: surfaceview 也是一种view
    <SurfaceView android:id="@+id/sfv"
                ....../>
渲染 什么也没写
三、音频播放
1. 初始化解码器
2. 获取参数不一样
3. 需要初始化一个音频渲染器:AudioTrack
4. 手动渲染音频数据,实现播放
四、调用并播放 
        //开启播放
        videoDecoder.goOn()
        audioDecoder.goOn()
五、音视频同步
scenario1: 不考虑暂停
同步的原理如下:
进入解码前: mStartTimeForSync=获取当前系统时间。
一帧数据解码出来以后:已经播放的时间= 当前系统时间- mStartTimeForSync
如果当前帧的PTS大于流失的时间,进入sleep,否则直接渲染。
scenario2:考虑暂停
1) 暂停的时间段=系统时间-暂停时间
新的mStartTimeForSync= mStartTimeForSync + 暂停的时间段
2) 新的mStartTimeForSync=恢复播放时的系统时间-当前正要播放的帧的PTS

音视频硬解码篇:四、音视频解封和封装:生成一个MP4

https://blog.csdn.net/cxpamcu/article/details/103486483

本文的重点是解封和封装。
解封使用mExtractor.read(mExtractor是前文实现,wrapper android自带的分离器) 。
封装使用android的meidaMuxer, mMediaMuxer?.writeSampleData
一、音视频解封
第一步,初始化MediaExtractor
第二步,获取音频或视频的格式
第三步,读取(分离)音视频数据
mExtractor!!.readSampleData
mExtractor!!.advance()//进入下一帧
二、音视频封装
第一步,初始化
第二步,添加音视频轨道,设置音视频数据流格式,并启动封装器
第三步,写入数据,也很简单,将解封得到的数据写入即可。
mMediaMuxer?.writeSampleData(mVideoTrackIndex, byteBuffer, bufferInfo)
mMediaMuxer?.writeSampleData(mAudioTrackIndex, byteBuffer, bufferInfo)
第四步,释放封装器,完成封装过程
三、整合解封和封装流程
首先,定义了音频和视频分离器,以及封装器;
接着,判断要重封装的视频是否包含有音视频数据,没有则忽略相应的轨道;
最后,启动线程,开始解封和封装,分为两部分:
音频数据分离和写入
视频数据分离和写入
四、调用MediaRepack重封装工具实现重封装
MP4Repack

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值