android 底层可以调用mediaplayer.h吗

2024-12-17 10:49:49
推荐回答(2个)
回答1:

Android的MediaPlayer包含了Audio和video的播放功能

关于MediaPlayer的使用方式: 


  1. 如何获得MediaPlayer实例:
    可以使用直接new的方式:
    MediaPlayer mp = new MediaPlayer();
    也可以使用create的方式,如:
    MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了


2.如何设置要播放的文件:

MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("mp3或者mp4的地址");


3。 MediaPlayer常用API

MediaPlayer的setDataSource一共四个方法:
setDataSource (String path) 
setDataSource (FileDescriptor fd) 
setDataSource (Context context, Uri uri) 
setDataSource (FileDescriptor fd, long offset, long length)


4.对播放器的主要控制方法:

Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:


1.prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。

2. start()是真正启动文件播放的方法。
3.pause()和stop()比较简单,起到暂停和停止播放的作用。

4.seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
5.release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。

6.reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。

回答2:

1.概述

  Android的MediaPlayer包含了Audio和Video的播放功能,Music和Video两个应用程序都是调用MediaPlayer实现的。

  代码主要分布在以下的目录中:

  JAVA程序的路径:

  packages/apps/Music/src/com/android/music/

  JAVA类的路径:

  frameworks/base/media/java/android/media/MediaPlayer.java

  JAVA本地调用部分(JNI):

  frameworks/base/media/jni/android_media_MediaPlayer.cpp

  编译为 libmedia_jni.so

  头文件:

  frameworks/base/include/media/

  多媒体库:

  frameworks/base/media/libmedia/

  编译为 libmedia.so

  多媒体服务:

  frameworks/base/media/libmediaplayerservice/

  编译为 libmediaplayerservice.so

  具体实现:

  external/opencore/

  编译为 libopencoreplayer.so

  libopencoreplayer.so是主要的实现部分,其他的库基本上都是在其上建立的封装和为建立进程间通讯的机制。