返回介绍

3. MediaPlayer 调用流程

发布于 2024-12-23 21:17:29 字数 2277 浏览 0 评论 0 收藏 0

MediaPlayer 中涉及到的主要函数都是通过 JNI 来完成的,MediaPlayer.java 对应的是 android_media_MediaPlayer.cpp 。其中的对应关系如下,省略了一部分不是特别重要的。

static JNINativeMethod gMethods[] = {
  {
    "nativeSetDataSource",
    "(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;"
    "[Ljava/lang/String;)V",
    (void *)android_media_MediaPlayer_setDataSourceAndHeaders
  },
  {"_setDataSource",     "(Ljava/io/FileDescriptor;JJ)V",  (void *)android_media_MediaPlayer_setDataSourceFD},
  {"_prepare",      "()V",                (void *)android_media_MediaPlayer_prepare},
  {"prepareAsync",    "()V",                (void *)android_media_MediaPlayer_prepareAsync},
  {"_start",        "()V",                (void *)android_media_MediaPlayer_start},
  {"_stop",         "()V",                (void *)android_media_MediaPlayer_stop},
  {"getVideoWidth",     "()I",                (void *)android_media_MediaPlayer_getVideoWidth},
  {"getVideoHeight",    "()I",                (void *)android_media_MediaPlayer_getVideoHeight},
  {"seekTo",        "(I)V",               (void *)android_media_MediaPlayer_seekTo},
  {"_pause",        "()V",                (void *)android_media_MediaPlayer_pause},
  {"isPlaying",       "()Z",                (void *)android_media_MediaPlayer_isPlaying},
  {"getCurrentPosition",  "()I",                (void *)android_media_MediaPlayer_getCurrentPosition},
  {"getDuration",     "()I",                (void *)android_media_MediaPlayer_getDuration},
  {"_release",      "()V",                (void *)android_media_MediaPlayer_release},
  {"_reset",        "()V",                (void *)android_media_MediaPlayer_reset},
  {"native_init",     "()V",                (void *)android_media_MediaPlayer_native_init},
  {"native_setup",    "(Ljava/lang/Object;)V",      (void *)android_media_MediaPlayer_native_setup},
};

Java 这边的调用顺序通常是:

MediaPlayer mp = new MediaPlayer();
mp.setDataSource("/sdcard/test.mp3");
mp.prepare();
mp.start();
mp.pause();
mp.stop();
mp.release();

下面将按照这个顺序一步一步来分析。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文