NuPlayer 框架

 

那么一个类的对外接口部分通常包括:

  • 构造函数和析构函数
  • 必须调用的接口
  • 可选的调用接口

 

在多媒体播放中,通过关注的点有:

  • 如何实现解复用,得到音频、视频、字幕等数据
  • 如何实现解码
  • 如何实现音视频同步
  • 如何渲染视频
  • 如何播放音频
  • 如何实现快速定位
  •  
  1. 不同格式的多媒体文件如何探测并解析的?音视频数据缓冲区在哪里?(Source)
  2. 视频如何显示的?音频如何播放的?音视频同步在哪里?(Renderer)
  3. 音频解码线程、视频解码线程在哪里? (DecoderBase)

http://www.cnblogs.com/tocy/p/5-nuplayer-GenericSource-source-code-analysis.html

 

ACodec与MediaCodec的通知

http://blog.csdn.net/coolcary/article/details/51939080

 

Renderer对video的处理是判断video是否已经延迟过长,如果是就不渲染了。
渲染开始是在ACodec的onOMXFillBufferDone,ACodec发消息到MediaCodec,MediaCodec会updateBuffers然后调用onOutputBufferAvailable中通知Decoder有可用的output buffer.
Decoder接收消息后就handleAnOutputBuffer.之后Decoder和Renderer交互,会判断是否渲染,通知Renderer会回调Decoder的onRenderBuffer(msg),然后Decoder会和MediaCodec交互,
MediaCodec判断是软件渲染或者硬件渲染,软件渲染就交给SofterwareRender,硬件渲染就交给ACodec。不管MediaCodec决定这么渲染,都会回调到ACodec中的onOutputBufferDrained(msg),继续fillbuffer,之后ACodec被OMX继续回调onOMXFillBufferDone.

http://blog.csdn.net/coolcary/article/details/51939158

 

 

Decoder会和MediaCodec做交互,做渲染。MediaCodec是判断视频渲染的关键。
交给MediaCodec的renderOutputBufferAndRelease 或者 releaseOutputBuffer;一个会真的渲染一个不渲染

 

这个应该是一开始就创建好的一个类!

MediaMetadataRetriever类提供了一个统一的接口用于从一个输入媒体文件中取得帧和元数据。

 

mediascanner----》StagefrightMediaScanner

http://blog.csdn.net/vincent_blog/article/details/9983581

 

 

实际解码过程中,无外乎获取输入的压缩数据,MediaCodec解码,返回解码之后的数据,渲染

实际的解码开始是从onSetRenderer开始,Part 4中对这个函数的实现也有介绍,循环解码的逻辑来在于onRequestInputBuffers函数,其中会调用doRequestBuffers

 
解码前的数据准备  MediaCodec::CB_INPUT_AVAILABLE handleAnInputBuffer

解码后的数据处理函数是handleAnOutputBuffer,响应MediaCodec::CB_OUTPUT_AVAILABLE消息

AVFactory::get()->createACodec();   //  MediaFilter

 

ACodec与MediaCodec的通知。OMX的组件解码之后,当ACodec的onOMXFillBufferDone会被回调,去取得解码后的数据。
ACodec在onOMXFillBu

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值