- 27
- 0
- 约1.02万字
- 约 15页
- 2019-10-27 发布于湖北
- 举报
Android视频播放数据读取的流程
/s/blog_645b74b90101aezn.html
这里分析Android4.0.1本地视频数据读取的流程,其他过程类似
当播放条件准备妥当之后,就要循环进行读取视频的原始数据放到MediaBuffer,将MediaBuffer中的数据输送到解码器中解码,解码后的数据放到MediaBuffer中,在将这MediaBuffer中的数据进行render显示。
本文主要侧重读取原始数据的流程,主要是代码跟踪,不夹杂个人分析,有些mpeg4的算法不懂。
1:onVideoEvent中开始读取数据,具体代码如下:
void AwesomePlayer::onVideoEvent() {
if (!mVideoBuffer) {
MediaSource::ReadOptions options;
if (mSeeking != NO_SEEK) {
LOGV(seeking to %lld us (%.2f secs), mSeekTimeUs, mSeekTimeUs / 1E6);
options.setSeekTo(
mSeekTimeUs,
mSeeking == SEEK_VIDEO_ONLY
? MediaSource::ReadOptions::SEEK_NEXT_SYNC
: MediaSource::ReadOptions::SEEK_CLOSEST_SYNC);
}
for (;;) {
status_t err = mVideoSource-read(mVideoBuffer, options);
}
}
}
蓝色为核心代码,如果是正常读取,options为null,否则这个结构体中包含了seek到的时间和seek的模式,用于具体从文件中哪里开始读取,传入的mVideoBuffer引用用来装解码后的数据
2:蓝色部分调用的是OMXCodec::read函数,这个函数中核心的代码如下:
status_t OMXCodec::read(
MediaBuffer **buffer, const ReadOptions *options) {
status_t err = OK;
*buffer = NULL;
bool seeking = false;
int64_t seekTimeUs;
ReadOptions::SeekMode seekMode;
if (options options-getSeekTo(seekTimeUs, seekMode)) {
seeking = true;
}
if (seeking) {
CODEC_LOGV(seeking to %lld us (%.2f secs), seekTimeUs, seekTimeUs / 1E6);
CHECK(seekTimeUs = 0);
mSeekTimeUs = seekTimeUs;
mSeekMode = seekMode;
}
drainInputBuffers();
size_t index = *mFilledBuffers.begin(); // A list of indices into mPortStatus[kPortIndexOutput] filled with data.
mFilledBuffers.erase(mFilledBuffers.begin());
BufferInfo *info = mPortBuffers[kPortIndexOutput].editItemAt(index);
CHECK_EQ((int)info-mStatus, (int)OWNED_BY_US);
info-mStatus = OWNED_BY_CLIENT;
info-mMediaBuffer-add_ref();
*buffer = info-mMediaBuffer;
return OK;
}
两点:
a,drainInputBuffers开始了数据的读取;
b,mFilledBu
您可能关注的文档
- AltiumDesigner AD6 AD9制作LOGO终极大招,大小随意放置.doc
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类.docx
- altium_designer集成元件库的创建.ppt
- Android WebView加载Chromium动态库的过程分析.doc
- Android工程各文件夹结构的含义及全代码使用与全解.docx
- Airbridge_使用指南(网优入门)_V12.doc
- Android_Ch05_活动与版面配置.ppt
- android开发--ListView+Json+异步网络图片加载+滚动翻页的例子.doc
- Android期末考试复习.docx
- Android常用控件及使用方法.ppt
- 统编版2025年春季新版七年级下册历史 第21课 明清时期的科技与文化 教案.docx
- 雅安雨城法院书记员招聘考试真题库2025.docx
- 2026届安徽合肥市高考一模高考语文试卷试题(含答案详解).pdf
- 【专题研究】国内外城市更新研究的最新进展.pdf
- 【专题研究】老旧城区改造居民满意度影响因素研究——以遂宁市老旧城区改造为例.pdf
- 【专题研究】关于旧城空间改造理论与创意设计案例的几点思考.pdf
- 西藏拉萨市高三下学期期末物理备考重点详解.docx
- 泾县法院书记员招聘笔试真题2025.pdf
- 2026年春【苏教版】-六年级数学下册-面积的变化.pptx
- 2026年春【苏教版】-六年级数学下册-7.pptx
最近下载
- 电力电子应用技术-第5版答案-第2章-思考题和习题.doc VIP
- 2025年CSCO胃癌诊疗指南解读-PPT课件(图文).pptx VIP
- 2026年鄂尔多斯生态环境职业学院高职单招职业适应性测试备考题库及答案解析.docx VIP
- (无损检测新技术课件)无损检测技术概论.pptx VIP
- 【高清可复制】S775(六)重力式无阀滤池.pdf VIP
- 2025年山西青年职业学院单招笔试综合素质试题库含答案解析(5套共100道单选合辑).docx VIP
- 西安历史与文化.ppt VIP
- 因道路坑洼造成轮胎爆胎的民事起诉状模板.docx VIP
- 客户转托管、撤指定挽留流程和技巧.docx VIP
- 河海大学2024-2025学年第1学期《宏观经济学》期末考试试卷(B卷)附标准答案.docx
原创力文档

文档评论(0)