`
zhanglibin1986
  • 浏览: 381594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 多媒体相关代码概况—(JAVA SCOPE)

阅读更多
【以下是转载】

1 ./packages/providers/MediaProvider/

编译后生成MediaProvider.apk。会在开机时扫描本机和sdcard上的媒体文件(图片、视频、音频),并在/data/data /com.android.providers.media/databases 目录下生成internal.db(/system/meida)和external-?.db(/sdcard)两个数据库文件.此后,所有的多媒体信息都从这两个数据库中获取。

2 ./packages/apps/Music

编译后生成Music.apk,用来播放音频文件。播放列表及相关信息从external-?.db中获取。

3 ./packages/apps/Camera/
编译后生成Camera.apk,对应于Camera、Gallery、Camcorder三个应用。
其中Gallery用来管理所有的视频和图片文件,具有播放、查看、删除等功能。

4 ./frameworks/base/core/java/android/widget/VideoView.java

android 封装的一个视频播放控件,可一通过下面的方式使用:
import android.widget.VideoView;
...
final VideoView view = (VideoView)findViewById(R.id.video_view);
view.setVideoPath("/sdcard/test.mp4");
view.start();
...
在XML描述中加入:
<VideoView android:id="@+id/video_view"
android:layout_width="fill_parent"
android:layout_height="300px"
/>


5 ./frameworks/base/core/java/android/provider/MediaStore.java

android 提供的多媒体数据库, android 的所有多媒体数据信息都可以从这里提取。数据库
的操作通过利用ContentResolver调用相关的接口实现。

6 ./frameworks/base/media/java/android/media
提供了android上 多媒体应用层的操作接口。主要说明:

MediaPlayer.java:提供了视频、音频、数据流的播放控制等操作的接口。
MediaRecorder.java:提供了视频、音频录制的接口。
AudioManager.java: 提供了音频音量,以及播放模式(静音、震动等)的控制。
RingtoneManager.java、Ringtone.java: 提供了提醒、闹钟、事件等声音的播放控制。
MediaScanner*.java: 提供了媒体扫描接口的支持。
AudioTrack.java:SoundPool.java 播放android application的生音资源。
AudioRecord.java: 为android applicatio 提供录音设置(sample、chanel等)的接口;

简单的例子:

播放一个文件:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(“/sdcard/test.mp3”);
mp.prepare();
mp.start();

播放raw resouce
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();

录音:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(“/sdcard/test.amr”);
recorder.prepare();
recorder.start();
...
alarmclock 调用Media 的基本过程:
...
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);

// 检查是否是在通话中,若是,就换用较小的声音提示。
if (tm.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
Log.v("Using the in-call alarm");
mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);
setDataSourceFromResource(context.getResources(),
mMediaPlayer, R.raw.in_call_alarm);
}
else
{
mMediaPlayer.setDataSource(context, Uri.parse(mAlert));
}
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.prepare();
...

android 多媒体相关代码概况二(FrameWork相关)

帖子由 dycl3 于 2009-04-22 18:50
1、./frameworks/base/media/jni
JAVA本地调用部分。编译后生成的目标是libmedia_jni.so.
android_media_MediaPlayer.cpp: MediaPlayer 的JAVA本地调用部分。
它定义了一个JNINativeMethod(JAVA本地调用方法)类型的数据gMethods,
用来描述,接口的关联信息。
android_media_MediaRecorder.cpp: 定义了录音的本地调用实现。
android_media_AmrInputStream.cpp: amr 编码相关的本地调用实现。
android_media_MediaScanner.cpp: 媒体扫描相关的本地调用实现。
soundpool/android_media_SoundPool.cpp:定义了音频系统的本地调用实现。

2、 ./frameworks/base/media/libmedia
./frameworks/base/include/media/
这里为多媒体的的底层库,编译生成libmedia.so.这个库处于android多媒体架构的核心
位置,它对上层提供的接口主要有MediaPlayer、MediaRecorder、MediaScanner等类.
android.meida.* 就是通过libmedia_jni.so 调用libmedia.so实现的接口实现的。
还需要注意的是MediaPlayerInterface.h 这个头文件,他定义了MediaPlayer的
底层接口。它主要定义了下面的类:
MediaPlayerBase:MediaPlayerInterface的抽象基础类,里面包含了音频输出、
视频输出、播放控制等的基本接口。
MediaPlayerInterface、MediaPlayerHWInterface 继承自MediaPlayerBase针对不同输出作出的扩展。

3、 ./frameworks/base/media/libmediaplayerservice
这是多媒体的服务部分,编译生成libmediaplayerservice.so.
MediaPlayerService.cpp 实现了一个名字为media.player的服务,MediaPlayer通过
IPC同其实现通讯,以建立合适的播放器。
在MediaPlayerService.cpp 会根据playerType的类型来决定创建不同的播放器。
现有的播放器类型有PVPlayer、MidiFile、VorbiPlayer三个播放器类,他们都是有继承
MediaPlayerInterface得到,具有相同的播放接口。我们这里可以通过继承MediaPlayerInterface
的方法,实现增加新的播放器实现。

4、 ./external/opencore/
opencore多媒体播放器部分,编译主要生成libopencoreplayer.so。他提供给上层的主要有两个部分:
* PVPlayer:提供了媒体的播放功能。
* PVAuthor:提供媒体的记录的功能。
opencore/android 目录下实现了opencore同libmediaplayerservice.so的交互接口。
分享到:
评论

相关推荐

    java代码-Scope

    在Java编程语言中,"Scope"(作用域)是一个至关重要的概念,它定义了变量、类、接口等程序元素在代码中的可见性和生命周期。理解作用域对于编写清晰、高效的代码至关重要。在这里,我们有两个文件:`main.java`,很...

    Spring之scope讲解测试示例代码

    在提供的示例代码中,你可能看到了如何在Spring配置文件中定义这些scope,以及如何在Java代码中注入和使用这些Bean。`main`函数可能用于非Web环境下的测试,而Web工程部分则展示了如何在Web应用中使用Bean。 在...

    java执行JavaScript代码

    然而,有时候我们可能需要在Java程序中执行JavaScript代码,这通常是出于跨语言交互或者利用JavaScript的某些特性来增强Java应用的功能。这篇博客(博文链接已提供)将介绍如何在Java中执行JavaScript代码,这主要...

    dagger针对Android和Java快速依赖注入框架

    **正文** Dagger,一个由Google开发的Java库,被设计为一个强大的依赖注入框架,广泛应用于...在Android和Java项目中采用Dagger,可以帮助开发者更好地组织代码,提高开发效率,同时增强应用的测试能力和可扩展性。

    LDAP搭建及其Java代码连接

    **LDAP搭建及其Java代码连接** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,主要用于存储和检索用户信息、组织结构等元数据。它采用层次化的树状结构,便于管理和查找。在IT领域,...

    springboot工程(单个maven工程)利用proguard实现代码混淆 java demo案例

    在Java开发中,尤其是对于发布到生产环境的项目,代码安全性和性能优化是至关重要的环节。Spring Boot作为Java领域广泛使用的微服务框架,其工程结构通常包含敏感信息和业务逻辑,因此,对代码进行混淆处理可以有效...

    网页设计java代码

    然而,由于题目要求从这段信息中提取出与“网页设计Java代码”相关的知识点,我们可以通过这段HTML代码来探讨一下如何在网页设计中运用Java技术,以及如何在实际开发中将Java与HTML相结合。 ### 一、理解HTML代码 ...

    Android-kotlin实现网络请求库

    本项目"Android-kotlin实现网络请求库"是基于Kotlin构建的一个自定义网络请求库,结合了fastjson用于数据解析,HandlerThread来管理后台任务,以及自定义注解以提升代码的可读性和易用性。下面我们将详细探讨这些...

    IntelliJ+Maven+Jetty+Jrebel实现web项目java代码更改后热部署

    "IntelliJ+Maven+Jetty+Jrebel"的组合正是为了解决这一问题,实现Web项目的Java代码更改后能够自动热部署。这个解决方案集成了几个关键工具,包括: 1. **IntelliJ IDEA**: 这是一款强大的Java集成开发环境(IDE)...

    jsp获取javaBean数据+scope获取访问次数

    JavaBean是一种符合特定规范的Java类,通常用于封装业务逻辑或数据,而JSP则是一种动态网页技术,允许开发者在HTML中嵌入Java代码,实现服务器端的业务处理。在这个场景下,我们将探讨如何在JSP页面中获取JavaBean的...

    Java通用代码生成实用程序XDoclet(源码包)

    XJavaDoc 引擎:XJavaDoc 解析 Java 源文件,然后构建有关类和语言特征(包、方法和字段)以及元数据的信息树。XJavaDoc 引擎通过一个易于使用的 API 提供访问。该 API 提供了与带有一些额外特征的 JavaDoc API 相同...

    Android代码-toothpick

    Toothpick is a scope tree based Dependency Injection (DI) library for Java. It is a full-featured, runtime based, but reflection free, implementation of JSR 330. What does Toothpick offer ? //a ...

    Android代码-Android

    • Scope This app supports the Android OS only and make communications with phone through SMS. • Methodology Android Developer Tools (Eclipse) was used for development. Tested on Android Virtual ...

    android不使用webview与js交互

    这样,我们可以在Java代码中执行JavaScript逻辑,而无需Webview。 ```java Context context = ...; Scriptable scope = ...; // 初始化Rhino环境 Context rhinoContext = Context.enter(); try { Object ...

    Java简化臃肿代码之Lombok

    这篇博文将深入探讨Lombok如何帮助我们优化Java代码。 Lombok是一个开源项目,它提供了许多注解,可以在编译时自动插入getter、setter、构造函数、equals、hashCode和toString方法,甚至包括@NonNull检查等功能。...

    Dagger2中Scope使用Demo

    总结来说,Dagger2中的`@Scope`注解允许开发者更精细地控制依赖的生命周期,以适应Android应用中各种组件的不同需求。通过合理使用,可以避免内存泄漏,提高代码的可测试性和可维护性。在实际项目中,应根据组件的...

    Android代码-Once

    A small Android library to manage one-off operations for API 9 and higher. Some things should happen once. Users should only get the guided tour once. Release notes should only pop up once every ...

    Android代码-RxBus

    Includes small Android example project. You should think twice though before using an event bus in project, it might create a complicated data flow in your app and a nightmare for debugging later. ...

    js调用android本地方法的实现

    默认情况下,JS代码并不能直接访问Android的原生API,因此我们需要一种方式来建立JS与Android之间的桥梁。 **一、使用addJavascriptInterface** `addJavascriptInterface`是Android提供的一种让JS调用Android原生...

Global site tag (gtag.js) - Google Analytics