专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 多媒体设计

Android多媒体开发札记【8】- AwesomePlayer基本框架及播放流程

发布时间:2011-06-27 19:08:20 文章来源:www.iduyao.cn 采编人员:星星草
Android多媒体开发笔记【8】-- AwesomePlayer基本框架及播放流程




1.通过setDataSource 指定播放器的数据源。可以是URI或者fd.可以是http:// 、rtsp://、本地地址或者本地文件描述符fd。其最终调用是将上层传递来的参数转化为DataSource,为下一步的demux提供数据支持。

2.在真正Prepare功能函数onPrepareAsyncEvent()会调用finishSetDataSource_l。通过第一步产生的DataSource来生成extractor,因为封装的格式很多,所以需要通过DataSource的信息,去创建不同的extractor。

extractor = MediaExtractor::Create(
                dataSource, sniffedMIME.empty() ? NULL : sniffedMIME.c_str());
    if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_MPEG4)
            || !strcasecmp(mime, "audio/mp4")) {
        ret = new MPEG4Extractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_MPEG)) {
        ret = new MP3Extractor(source, meta);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_NB)
            || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_WB)) {
        ret = new AMRExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC)) {
        ret = new FLACExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_WAV)) {
        ret = new WAVExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_OGG)) {
        ret = new OggExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_MATROSKA)) {
        ret = new MatroskaExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_MPEG2TS)) {
        ret = new MPEG2TSExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_WVM)) {
        // Return now.  WVExtractor should not have the DrmFlag set in the block below.
        return new WVMExtractor(source);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC_ADTS)) {
        ret = new AACExtractor(source, meta);
    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_MPEG2PS)) {
        ret = new MPEG2PSExtractor(source);
    }

3.得到extractor之后,通过setVideoSource() setAudioSource()产生独立的mVideoTrack(视频)、mAudioTrack(音频)数据流,分别为音视频解码器提供有各自需要的数据流。

其实extractor和mVideoTrack、mAudioTrack就组成了播放器模型中的demuxer部分。把封装格式里面的音视频流拆分出来,分别的送给音视频解码器。

4.接下来就是initVideoDecoder() initAudioDecoder().依赖上面产生的mVideoTrack(视频)、mAudioTrack(音频)数据流。生成了mVideoSource和mAudioSource这两个音视频解码器。不同类型匹配不同的解码器。

mVideoSource = OMXCodec::Create(
            mClient.interface(), mVideoTrack->getFormat(),
            false, // createEncoder
            mVideoTrack,
            NULL, flags, USE_SURFACE_ALLOC ? mNativeWindow : NULL);
 mAudioSource = OMXCodec::Create(
                mClient.interface(), mAudioTrack->getFormat(),
                false, // createEncoder
                mAudioTrack);
    }

mVideoSource、mAudioSource组成了播放器模型中的decoder部分。

android系统中的编解码器部分用的是openmax,以后会深入了解。openma x是一套标准接口,各家硬件厂商都可以遵循这个标准来做自己的实现,发挥自己芯片特性。然后提供给android系统来用。因为大部分的机顶盒芯片产品硬件的编解码是它的优势,可以把这种优势完全融入到android平台中。以后手机高清视频硬解码也会是个趋势。

5.解码完之后的数据就要输出了。AwesomePlayer分别用了mVideoRenderer做视频输出、mAudioPlayer做音频输出。他们分别调用android图像和音频的相关服务。这俩部分是android平台中十分重要的2块,以后会深入了解。

mVideoRenderer和mAudioPlayer就组成了播放器中output的部分。


综上AwesomePlayer的整体框架和流程就清晰了,其实也脱离不了DataSource、demux、decoder、output这4大部分。接下来会分别了解每个部分是怎么实现的。


友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • 3DMAX建模,该如何解决

    3DMAX建模 有哪问朋友可以做一个3DMAX的建模? 要求:熟悉3DMAX建模、可以到现场封闭1个月左右 地点:北京 费用:面谈 有意请与我联系:qyn...

  • 小弟我是新手,怎么做建筑动漫

    我是新手,如何做建筑动漫 请问一下动漫高手,我是动漫方面的新手,从那儿着手开始做建筑动漫,得学习哪些工具 ------解决方案---------...

  • 初学AE遇到的一个小疑点

    初学AE遇到的一个小问题! 图中的两个斜线怎么让它消失?就算是预览的时候都在!!!上面的字是Demo mode:Press "Options" to register....

  • 请教一下,纯3D的FLASH,需要什么软件做的

    请问一下,纯3D的FLASH,需要什么软件做的? 满有兴趣的,不知道需要哪些软件才能做, 有人讲直接在三D里面做,再用flash 来接起来的.?听说3D...

  • 问问opengl 和 3Dmax 还有maya的关系,该如何处理

    问问opengl 和 3Dmax 还有maya的关系 想问问 是不是 3D max 和maya 会取代opengl? 因为画三维图形, maya和 3dmax比 opengl 方便...

  • 能从.X文件中读取场景中物体信息么,该怎么处理

    能从.X文件中读取场景中物体信息么 比如说物体的名字,高度,类型,每个物体的贴图名字等等 ------解决方案-------------------- 物...

  • 动画制作,该怎么解决

    动画制作 要制作一个固体物理中的晶体形成的动画,求教,简单的动画 ------解决方案-------------------- 你是要教程还是要实例?...

  • 请问:3D人物动画有关问题

    请教:3D人物动画问题 我用poser7.0做了模型和几个动作比如微笑,摆手,点头等,我要在程序中使用这个模型和动作,模型保存的是3ds格式,动作...

  • 求名词解释 DirectX OpenGL 3Dmax Maya,该如何处理

    求名词解释 DirectX OpenGL 3Dmax Maya DirectX OpenGL 3Dmax Maya 求名词解释 这些软件之间有什么联系?什么区别? ------解决方...

  • 请问 怎么学好3ds max

    请教 如何学好3ds max 我是大二的学生,因为要做三维地图,要学习3ds max, 学习的主要是3ds max在建筑物建模的方面,求问有什么 好的方...

热门推荐: