android全格式多媒体播放器(二:opencore媒体系统解析)
来源:互联网 发布:网络销售员招聘信息 编辑:程序博客网 时间:2024/06/08 03:53
/*******************************************************************
• 此文章解释权归windsome所有,如要转载无须联系本人。
• 转载需要包含此抬头信息,如有疑问,欢迎联系本人。
• QQ: 35327864
• msn: fgwf1@hotmail.com
• mail: agooou@gmail.com
********************************************************************/
本文的目的是为了分析android中的多媒体播放体系,在了解了它的播放体系上,抛弃它原先的基于opencore的架构,重新涉及一套基于ffmpeg的架构。没有时间做详细论述,本文目前先列一个提纲,用来分析android2.1中媒体播放架构,以后得空再进行补充。
1,java部分供java应用程序调用的接口为android.media.MediaPlayer。关于此类的详细描述可以参考android的文档MediaPlayer.html。我将接口列在了下面,
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(mPreparedListener);
mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
mMediaPlayer.setOnCompletionListener(mCompletionListener);
mMediaPlayer.setOnErrorListener(mErrorListener);
mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
mMediaPlayer.setDataSource(mContext, mUri);
mMediaPlayer.setDisplay(mSurfaceHolder);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setScreenOnWhilePlaying(true);
mMediaPlayer.prepareAsync();
mMediaPlayer.isPlaying()
mMediaPlayer.start();
mMediaPlayer.pause();
mDuration = mMediaPlayer.getDuration();
mMediaPlayer.getCurrentPosition();
mMediaPlayer.seekTo(msec);
2,android.media.MediaPlayer中有2部分,一部分供java上层如VideoView调用,一部分为native方法,调用jni。所有用到的jni的接口可以在frameworks/base/media/jni/android_media_MediaPlayer.cpp中找到。
3,android_media_MediaPlayer.cpp会调用c++层次的mediaplayer,在这里根据不同的扩展名去调用不同的播放器,mp4可能会调用到PVPlayer。mediaplayer由下列文件实现,
frameworks/base/media/libmedia/IMediaPlayer.cpp
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
4,PVPlayer由opencore实现,从以下文件去探寻
frameworks/base/include/media/PVPlayer.h
external/opencore/android/playerdriver.cpp
5,视频显示的实现,使用android-surface进行render,由opencore对surfaceflinger做了封装,在下列文件中,
external/opencore/android/android_surface_output.h
external/opencore/android/android_surface_output.cpp
如果我们使用基于ffmpeg的多媒体播放器,这一块可以参考,并移植过去。
6,音频的实现,使用了AudioOutput,请参考如下文件
frameworks/base/media/libmediaplayerservice/MediaPlayerService.h
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
调用MediaPlayerService::AudioOutput::open,创建AudioTrack mTrack。可以查找一下调用了mTrack的哪些方法。
调用ssize_t ret = mTrack->write(buffer, size);将数据写入AudioTrack。
frameworks/base/include/media/AudioTrack.h
frameworks/base/media/libmedia/AudioTrack.cpp
7,音频这一块太过混杂,libmedia调用了opencore,libaudioflinger调用了libmedia,对于我们封装造成了很大困难。鉴于此,考虑直接调用linux音频设备,不使用android中libmedia,libaudioflinger。
8,欢迎联系 agooou@gmail.com 探讨
• 此文章解释权归windsome所有,如要转载无须联系本人。
• 转载需要包含此抬头信息,如有疑问,欢迎联系本人。
• QQ: 35327864
• msn: fgwf1@hotmail.com
• mail: agooou@gmail.com
********************************************************************/
本文的目的是为了分析android中的多媒体播放体系,在了解了它的播放体系上,抛弃它原先的基于opencore的架构,重新涉及一套基于ffmpeg的架构。没有时间做详细论述,本文目前先列一个提纲,用来分析android2.1中媒体播放架构,以后得空再进行补充。
1,java部分供java应用程序调用的接口为android.media.MediaPlayer。关于此类的详细描述可以参考android的文档MediaPlayer.html。我将接口列在了下面,
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(mPreparedListener);
mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
mMediaPlayer.setOnCompletionListener(mCompletionListener);
mMediaPlayer.setOnErrorListener(mErrorListener);
mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
mMediaPlayer.setDataSource(mContext, mUri);
mMediaPlayer.setDisplay(mSurfaceHolder);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setScreenOnWhilePlaying(true);
mMediaPlayer.prepareAsync();
mMediaPlayer.isPlaying()
mMediaPlayer.start();
mMediaPlayer.pause();
mDuration = mMediaPlayer.getDuration();
mMediaPlayer.getCurrentPosition();
mMediaPlayer.seekTo(msec);
2,android.media.MediaPlayer中有2部分,一部分供java上层如VideoView调用,一部分为native方法,调用jni。所有用到的jni的接口可以在frameworks/base/media/jni/android_media_MediaPlayer.cpp中找到。
3,android_media_MediaPlayer.cpp会调用c++层次的mediaplayer,在这里根据不同的扩展名去调用不同的播放器,mp4可能会调用到PVPlayer。mediaplayer由下列文件实现,
frameworks/base/media/libmedia/IMediaPlayer.cpp
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
4,PVPlayer由opencore实现,从以下文件去探寻
frameworks/base/include/media/PVPlayer.h
external/opencore/android/playerdriver.cpp
5,视频显示的实现,使用android-surface进行render,由opencore对surfaceflinger做了封装,在下列文件中,
external/opencore/android/android_surface_output.h
external/opencore/android/android_surface_output.cpp
如果我们使用基于ffmpeg的多媒体播放器,这一块可以参考,并移植过去。
6,音频的实现,使用了AudioOutput,请参考如下文件
frameworks/base/media/libmediaplayerservice/MediaPlayerService.h
frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
调用MediaPlayerService::AudioOutput::open,创建AudioTrack mTrack。可以查找一下调用了mTrack的哪些方法。
调用ssize_t ret = mTrack->write(buffer, size);将数据写入AudioTrack。
frameworks/base/include/media/AudioTrack.h
frameworks/base/media/libmedia/AudioTrack.cpp
7,音频这一块太过混杂,libmedia调用了opencore,libaudioflinger调用了libmedia,对于我们封装造成了很大困难。鉴于此,考虑直接调用linux音频设备,不使用android中libmedia,libaudioflinger。
8,欢迎联系 agooou@gmail.com 探讨
- android全格式多媒体播放器(二:opencore媒体系统解析)
- android全格式多媒体播放器(二:opencore媒体系统解析)
- android全格式多媒体播放器(二:opencore媒体系统解析)
- android全格式多媒体播放器(一:ffmpeg移植)
- android全格式多媒体播放器(一:ffmpeg移植)
- android全格式多媒体播放器(一:ffmpeg移植)
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- android全格式多媒体播放器(一:ffmpeg移植) 收藏
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- android全格式多媒体播放器(一:ffmpeg移植)-转载
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- Android多媒体框架的核心 OpenCore 解析
- Android的多媒体框架OpenCore(PacketVideo)
- Android 多媒体框架 OpenCore(PacketVideo)介绍
- Android的多媒体框架OpenCore(PacketVideo)
- Android多媒体架构图(opencore框架)
- Android多媒体框架OpenCore
- 当EditText是多行文本时, 光标如何设置在从左上角
- 【C#源代码】查询alexa全球,中国排名,google pr,google收录和百度收录及快照
- 新官上任应该做些什么
- 2011-12-15 ADM 使用
- 超强过滤器彻底解决JSP/SERVLET中文参数GET/POST传递的问题
- android全格式多媒体播放器(二:opencore媒体系统解析)
- weblogic jdbc 在删除时没有删除干净
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- VC动态创建控件
- Excel 部分操作总结
- 二厶可可肉 杂项 判断SQL 中,某列的值 是否非空
- C++课后习题
- 万网云翔主机centos系统下安装memcached
- 利用金山快盘在不同电脑上管理和同步IE收藏夹