- 10
- 0
- 约3.52万字
- 约 35页
- 2021-02-02 发布于天津
- 举报
An droid」cs_stagefright 框架数据流向分析
2014-01-03 10:15 78 人阅读 评论(0)收藏举报
原文:
An droid_ics_stagefright 框架数据流向分析 1,待解码的原始数据从何而
来
链接:/mci2004/article/details/7629146
先明确一点,stagefright 框架是典型的事件驱动型,数据的流向也受到事件
驱动(driven by eve nt )的影响,在awesomePlayer中主要的驱动事件有: on PrepareAs yn cEve nt,onV ideoEve nt,onStreamDone 这些 eve nt 会在
awesomeplayer中维护的TimedEventQueue mQueu中按照时间的顺序被放入这 个队列中。然后TimedEventQueue根据时间顺序来调度事件。这样做的目的是: 因为,按照mQueu曲事件的是按事件排序的,所以,在视频数据到来时,可以 根据视频的时间戳来进行音视频同步的调节。
AwesomePlayer中音视频的同步处理就是在 onVideoEvent()回调中来做的。
当应用层调用mediaplayer.prepare() 的时候,在框架内最终对应的
是 AwesomePlayer::prepareAsync_l() ,
这个函数的实现很简单,看下主要的实现部分:
status」AwesomePlayer::prepareAs yn c_l() {
J
mAsyn cPrepareEve nt = new AwesomeEve nt(this,
AwesomePlayer::o nPrepareAs yn cEve nt);
mQueue.postEvent(mAsyncPrepareEvent); // 向 mQueue^投递一个事件
}
那么当mQueu(在进行事件调度的时候,会执行到事件对应的回调函数,
例如上面mAsyncPrepareEvent对应的回调
函数就是onPrepareAsyncEvent。回调函数的实现大致如下,有些部分直接略 掉了
void AwesomePlayer:: on PrepareAs yn cEve nt() {
status_t err = finishSetDataSource_l();
--a
status_t err = initVideoDecoder();
---b
status_t err = ini tAudioDecoder();
finishAsyncPrepare_l();
c
}
对回调实现中的部分函数做简单分析:
a,finishSetDataSource_l() 中主要做了三件事:
一,根据不同的数据来源,来确定 dataSource的来源,如果数据来源于网络
(Http/widevine )贝9 dataSource 来自与 cacheSource (流媒体播放的缓冲), 如果数据来源于文件,则dataSource会被绑定到FileSource(uri)。
二,根据前面确定的dataSource的类型来:
extractor = MediaExtractor::Create(dataSource, sni ffedMIME.empty() ?
NULL : sni ffedMIME
?c_str());
产生一个具体的文件解析器,在这个 Create函数中,会根据DataSource基类
中所注册的Sniff函数(有很多个Sniff函数,例
如 Sn iffMPEG4, SniffOgg 等)来“嗅探”这个 dataSource。根据 con fide nee 值来确定这个 dataSource 的 mimetype,然
后再根据确定的mimetype来创建具体的XXXExtractor。本文中所讨论的对象
是 MPEG4Extractor。
三,最后一步也是最复杂的一部分,这一步决定了原始数据的来源,在
fin ishSetDataSource_l() 函数中最后一步调用的是
status_t err = setDataSource_l(extractor); 这里的 extractor 就是前面所
创建的XXXExtractor,假定是
MPEG4Extractor。下面简单的分析如下,setDataSource_l(extractor); 实现如 下 _
status_t AwesomePlayer::setDataSource_l(c onst spvMediaExtractor extractor) { for (size_t i = 0; i extractor-co un tTracks()
您可能关注的文档
- 8第八章习题及答案修改.docx
- 8第八章无形资产及其他资产.docx
- 8综合情况表-教育管理研究系列.docx
- 8美国总统周末电台演1.docx
- 9#楼-主体工程验收评估报告.docx
- 9#工程焊接隐蔽报验收表.docx
- 9-14登高锦瑟虞美人念奴娇永遇乐氓翻译及默写.docx
- 9-成本管理部岗位说明书.docx
- 8第八章无形资产习题答案.docx
- 9.1品种法的概念、适用范围和特点.docx
- 浙江省温州市2024-2025学年七年级上学期语文期末考查卷.docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(原卷版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(解析版).docx
- 精品解析:北京市海淀区2025-2026学年九年级上学期期末语文试题(解析版).docx
- 精品解析:北京市东城区汇文中学2025-2026学年八年级上学期期中语文试题(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(原卷版).docx
- 精品解析:2024-2025学年广东省广州市从化区街口镇中心小学人教版五年级上册期中测试数学试卷(解析版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(解析版).docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(解析版).docx
最近下载
- CJ_T 553-2024 城市数字公共基础设施统一识别代码编码规则.docx VIP
- 基于esp32的智能家居系统.docx VIP
- 征兵政治考核培训课件.ppt VIP
- 你好法语1课文unité2-4.pdf VIP
- 京东合规专员岗面试题库参考答案和答题要点.docx VIP
- 福建省泉州市2024-2025学年高二上学期期末教学质量监测生物试卷(含答案).pdf VIP
- 2025.4.11 装修改造项目加固工程施工方案,六大加固方法施工要点集齐了!94页Word可下载!.docx VIP
- 2024-2025学年河南省商丘市柘城县九年级上学期期末考试数学试题(含答案).pdf VIP
- 某水泥厂施工组织方案总方案.doc VIP
- 广东省中山市2023-2024八年级上学期期末考试数学试卷 .pdf VIP
原创力文档

文档评论(0)