android全格式多媒体播放器(二:opencore媒体系统解析)
来源:互联网 发布:网络推广怎么拿提成 编辑:程序博客网 时间:2024/04/26 06:53
作者 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
- CSS小知识
- MyEclipse SSH初体验
- 借助 flot 将 HTML 表格中的内容变成图形
- Janu. 5
- android全格式多媒体播放器(一:ffmpeg移植)
- android全格式多媒体播放器(二:opencore媒体系统解析)
- Win32 下内存泄漏检测的一个方法
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- 免费虚拟现实软件下载(VEStudio2.0实时阴影Beta版)
- ext
- 我是程序员么?
- 简单工厂模式
- 成功焊接BGA芯片技巧
- Java 网络 UDP