b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

stagefright框架_stagefright下载_stagefright是什么(3)

电脑杂谈  发布时间:2017-05-31 00:03:00  来源:网络整理

这里写图片描述

Audioplayer为AwesomePlayer的成员,audioplayer通过callback来驱动数据的获取,awesomeplayer则是通过 videoevent来驱动。二者有个共性,就是数据的获取都抽象成mSource->read()来完成,且read内部把parse和decode绑在一起。Stagefright 同步部分,audio完全是callback驱动数据流,注意是video部分在onVideoEvent里会获取audio的时间戳,是传统的时间戳做同步。

AwesomePlayer的Video主要有以下几个成员:

mVideoSource(解码视频)

mVideoTrack(从多媒体文件中读取视频数据)

mVideoRenderer(对解码好的视频进行格式转换,android使用的格式为RGB565)

mISuce(重绘图层)

mQueue(event事件队列)

stagefright运行时的Audio流程如下:

首先设置mUri的路径

启动mQueue,创建一个线程来运行 threadEntry(命名为TimedEventQueue,这个线程就是event调度器)

打开mUri所指定的文件的头部,则会根据类型选择不同的分离器(如MPEG4Extractor)

使用 MPEG4Extractor对MP4进行音视频轨道的分离,并返回MPEG4Source类型的视频轨道给mVideoTrack

根据 mVideoTrack中的编码类型来选择,avc的编码类型会选择CDecoder,并返回给mVideoSource,并设置mVideoSource中的mSource为mVideoTrack

插入onVideoEvent到Queue中,开始解码播放

通过mVideoSource对象来读取解析好的视频buffer

如果解析好的buffer还没到时间戳同步的时刻,则推迟到下一作

1、mVideoRenderer为空,则进行初始化(如果不使用 OMX会将mVideoRenderer设置为AwesomeLocalRenderer)

2、通过mVideoRenderer对象将解析好的视频buffer转换成RGB565格式,并发给display模块进行图像绘制

3、将onVideoEvent重新插入event调度器来循环

本文出自逆流的鱼:

可以对照《Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器》中那个图,这里不贴了,

设置DataSource,数据源可以两种URI和FD。URI可以,rtsp://等。FD是一个本地文件描述符,能过FD,可以找到对应的文件。

由DataSource生成MediaExtractor。通过sp extractor = MediaExtractor::Create(dataSource);来实现。 MediaExtractor::Create(dataSource)会根据不同的数据内容创建不同的数据读取对象。

通过调用setVideoSource由MediaExtractor分解生成音频数据流(mAudioTrack)和视频数据流(mVideoTrack)。

onPrepareAsyncEvent()如果DataSource是URL的话,根据地址获取数据,并开始缓冲,直到获取到mVideoTrack和mAudioTrack。mVideoTrack和mAudioTrack通过调用initVideoDecoder()和initAudioDecoder()来生成 mVideoSource和mAudioSource这两个音视频。然后调用postBufferingEvent_l()提交事件开启缓冲。

数据缓冲的执行函数是onBufferingUpdate()。缓冲区有足够的数据可以播放时,调用play_l()开始播放。play_l()中关键是调用了postVideoEvent_l(),提交了 mVideoEvent。这个事件执行时会调用函数onVideoEvent()。这个函数通过调用 mVideoSource->read(&mVideoBuffer, &options)进行视频解码。音频解码通过mAudioPlayer实现。

视频解码后通过mVideoSource->read读取一帧帧的数据,放到mVideoBuffer中,最后通过 mVideoRenderer->render(mVideoBuffer)把视频数据发送到显示模块。当需要暂停或停止时,调用cancelPlayerEvents来提交事件用来停止解码,还可以选择是否继续缓冲数据。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-50198-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...