`
- 浏览:
381594 次
- 性别:
- 来自:
北京
-
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的交互接口。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在Java编程语言中,"Scope"(作用域)是一个至关重要的概念,它定义了变量、类、接口等程序元素在代码中的可见性和生命周期。理解作用域对于编写清晰、高效的代码至关重要。在这里,我们有两个文件:`main.java`,很...
在提供的示例代码中,你可能看到了如何在Spring配置文件中定义这些scope,以及如何在Java代码中注入和使用这些Bean。`main`函数可能用于非Web环境下的测试,而Web工程部分则展示了如何在Web应用中使用Bean。 在...
然而,有时候我们可能需要在Java程序中执行JavaScript代码,这通常是出于跨语言交互或者利用JavaScript的某些特性来增强Java应用的功能。这篇博客(博文链接已提供)将介绍如何在Java中执行JavaScript代码,这主要...
**正文** Dagger,一个由Google开发的Java库,被设计为一个强大的依赖注入框架,广泛应用于...在Android和Java项目中采用Dagger,可以帮助开发者更好地组织代码,提高开发效率,同时增强应用的测试能力和可扩展性。
**LDAP搭建及其Java代码连接** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,主要用于存储和检索用户信息、组织结构等元数据。它采用层次化的树状结构,便于管理和查找。在IT领域,...
在Java开发中,尤其是对于发布到生产环境的项目,代码安全性和性能优化是至关重要的环节。Spring Boot作为Java领域广泛使用的微服务框架,其工程结构通常包含敏感信息和业务逻辑,因此,对代码进行混淆处理可以有效...
然而,由于题目要求从这段信息中提取出与“网页设计Java代码”相关的知识点,我们可以通过这段HTML代码来探讨一下如何在网页设计中运用Java技术,以及如何在实际开发中将Java与HTML相结合。 ### 一、理解HTML代码 ...
本项目"Android-kotlin实现网络请求库"是基于Kotlin构建的一个自定义网络请求库,结合了fastjson用于数据解析,HandlerThread来管理后台任务,以及自定义注解以提升代码的可读性和易用性。下面我们将详细探讨这些...
"IntelliJ+Maven+Jetty+Jrebel"的组合正是为了解决这一问题,实现Web项目的Java代码更改后能够自动热部署。这个解决方案集成了几个关键工具,包括: 1. **IntelliJ IDEA**: 这是一款强大的Java集成开发环境(IDE)...
JavaBean是一种符合特定规范的Java类,通常用于封装业务逻辑或数据,而JSP则是一种动态网页技术,允许开发者在HTML中嵌入Java代码,实现服务器端的业务处理。在这个场景下,我们将探讨如何在JSP页面中获取JavaBean的...
XJavaDoc 引擎:XJavaDoc 解析 Java 源文件,然后构建有关类和语言特征(包、方法和字段)以及元数据的信息树。XJavaDoc 引擎通过一个易于使用的 API 提供访问。该 API 提供了与带有一些额外特征的 JavaDoc API 相同...
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 ...
• 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 ...
这样,我们可以在Java代码中执行JavaScript逻辑,而无需Webview。 ```java Context context = ...; Scriptable scope = ...; // 初始化Rhino环境 Context rhinoContext = Context.enter(); try { Object ...
这篇博文将深入探讨Lombok如何帮助我们优化Java代码。 Lombok是一个开源项目,它提供了许多注解,可以在编译时自动插入getter、setter、构造函数、equals、hashCode和toString方法,甚至包括@NonNull检查等功能。...
总结来说,Dagger2中的`@Scope`注解允许开发者更精细地控制依赖的生命周期,以适应Android应用中各种组件的不同需求。通过合理使用,可以避免内存泄漏,提高代码的可测试性和可维护性。在实际项目中,应根据组件的...
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 ...
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的原生API,因此我们需要一种方式来建立JS与Android之间的桥梁。 **一、使用addJavascriptInterface** `addJavascriptInterface`是Android提供的一种让JS调用Android原生...