MediaPlayer,Camera
来源:互联网 发布:tv007网络电视下载 编辑:程序博客网 时间:2024/06/05 03:18
MediaPlayer vs Camera(1)
MediaPlayer与Camera都采用client/sever的架构,都由3对binder/bpbinder组成。
1. MediaPlayer架构
2. 3对Bpbinder/Binder
(1) MediaPlayer(c++)与BpMediaPlayerClient
它们都实现了IMediaPlayerClient 接口,用于将底层播放时的一些事件通知到上层,BpMediaPlayerClient是Client的成员。
(2) BpMediaPlayer与Client
实现了IMediaPlayer接口,BpMediaPlayer将播放的api(prepare,setdatasource,start等)发送给Client。BpMediaPlayer是MediaPlayer的成员,Client是MediaPlayerService的成员。
(3) BpMediaPlayerService与MediaPlayerService
主要是建立BpMediaPlayer与Client之间的连接。
3. 创建一个MediaPlayer的流程
(1) MediaPlayer.java
public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder) {
try {
MediaPlayer mp = new MediaPlayer();//构造函数中调用native_setup
mp.setDataSource(context, uri);//即调用c++ MediaPlayer的setDataSource
if (holder != null) {
mp.setDisplay(holder);
}
mp.prepare();
return mp;
(2) android_media_MediaPlayer.cpp
static void
android_media_MediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
{
sp<MediaPlayer> mp = new MediaPlayer();//创建 BnMediaPlayerClient
// create new listener and give it to MediaPlayer
sp<JNIMediaPlayerListener> listener = new JNIMediaPlayerListener(env, thiz, weak_this);
mp->setListener(listener);
// Stow our new C++ MediaPlayer in an opaque field in the Java object.
setMediaPlayer(env, thiz, mp);//存放起来,以后通过getMediaPlayer获取
}
(3) mediaplayer.cpp
status_t MediaPlayer::setDataSource(int fd, int64_t offset, int64_t length)
{
const sp<IMediaPlayerService>& service(getMediaPlayerService());
if (service != 0) {//得到 BpMediaPlayerService
sp<IMediaPlayer> player(service->create(getpid(), this, fd, offset, length));//得到BpMediaPlayer,以后api调用即都是通过BpMediaPlayer来调
err = setDataSource(player);
}
return err;
}
(4) MediaPlayerService.cpp
sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url)
{
sp<Client> c = new Client(this, pid, connId, client);
//创建Client,对应上面的 BpMediaPlayer,所有api调用都会传递给Client
if (NO_ERROR != c->setDataSource(url))//setDataSource会根据媒体类型创建不同的播放器,如PVPlayer,MiDiPlayer,StageFrightPlayer,具体的播放功能由他们实现
{
c.clear();
return c;
}
wp<Client> w = c;
Mutex::Autolock lock(mLock);
mClients.add(w);
return c;
}
- MediaPlayer,Camera
- 视频(多媒体) MediaPlayer,camera
- 11-23 多媒体 MediaPlayer、Camera、MediaRecorder Vitamio 笔记
- 视频播放器MediaPlayer拍照Camera-录像MediaRecorder
- mediaplayer
- mediaplayer
- mediaplayer
- MediaPlayer
- MediaPlayer
- MediaPlayer
- MediaPlayer
- mediaplayer
- MediaPlayer
- MediaPlayer
- mediaplayer
- MediaPlayer
- MediaPlayer
- Mediaplayer
- 详解数据中心概念
- Altera DE2-70学习笔记3-LED控制实验
- 详解Struts中Validator验证框架的使用
- Looper,Handler,Message,MessageQueue
- unicode转换
- MediaPlayer,Camera
- Redhat 下通过 Webmin 配置 Samba 的问题
- poj 1915 Knight Moves bfs 用move数组计算第几步好使
- 关于 MS SQL 触发器 的一些用法
- ksoap2 传webservice byte[]
- JQuery是什么?
- 贪心法实现Prim最小生成树(java)
- Http 上传文件之multipart form-data
- 赤脚追回曾经失去的……