首页 > 其他分享 >MediaPlayer

MediaPlayer

时间:2023-07-07 10:55:28浏览次数:43  
标签:MediaPlayer media mediaPlayer init android native

1.MediaPlayer

使用MediaPlayer

媒体框架最重要的组件之一是MediaPlayer类。这个类的对象可以使用最少的设置获取、解码和播放音频和视频。它支持几种不同的媒体来源,如:

  • 本地资源
  • 内部uri,例如您可能从contentProvider获得的uri
  • 外部url(流) 有关Android支持的媒体格式列表,请参阅支持的媒体格式页面。

下面是如何播放本地音频资源(保存在您的应用程序的res/raw/目录中):

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

在本例中,“raw”资源是系统不尝试以任何特定方式解析的文件。然而,这个资源的内容不应该是原始音频。它应该是一个以支持的格式之一适当编码和格式化的媒体文件。

下面是您如何从系统中本地可用的URI(例如,您通过内容解析器获得的URI)进行播放:

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

通过HTTP流媒体从远程URL播放如下:

String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();
注意:如果要通过一个URL来传输流媒体在线文件,该文件必须能够逐步下载。
注意:在使用setDataSource()时,您必须捕获或传递IllegalArgumentException和IOException,因为您引用的文件可能不存在。

代码位于:/frameworks/base/media/java/android/media/MediaPlayer.java

静态代码块如下:最先执行

static {
        System.loadLibrary("media_jni");
        native_init();
    }

初始化
MediaPlayer(Java)对象有自己的本地方法, 其位于frameworks/base/media/jni/android_media_MediaPlayer.cpp中, 这些方法均以android_media_MediaPlayer_开头, 因此"native_init"对应android_media_MediaPlayer_native_init().
MediaPlayer在构造时会做两件事情:

在加载libmedia_jni.so并执行native_init(), 这个步骤只获取MediaPlayer类相关的一些信息, 并不会初始化 C++ 对象
其native方法native_setup()接下来被调用, 这个步骤负责实例化一个MediaPlayer(C++)类, 并生成一个集成自MediaPlayerListener的JNIMediaPlayerListener用于监听来自播放器的消息. 新创建的MediaPlayer(C++)对象将被保存在MediaPlayer(Java)的mNativeContext中用于后续的下行调用.
MediaPlayer的初始化比较简单, 只有设置数据源之后才能开始 解封装 / 解码 / 渲染 等的工作.

   

标签:MediaPlayer,media,mediaPlayer,init,android,native
From: https://www.cnblogs.com/wanglongjiang/p/17534241.html

相关文章

  • MediaPlayer音频与视频的播放介绍
    Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码和播放音视频。它支持三种不同的媒体来源:本地资源内部的URI,比如你可以通过ContentResolver来获取外部URL(流)对于Android所支......
  • MediaRecorder录音,MediaPlayer播放
    直接看代码importjava.io.DataOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FilenameFilter;importjava.io.IOException;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.Mal......
  • 一手遮天 Android - view(媒体类): MediaPlayer(在 SurfaceView 上播放)
    项目地址https://github.com/webabcd/AndroidDemo作者webabcd一手遮天Android-view(媒体类):MediaPlayer(在SurfaceView上播放)示例如下:/view/media/MediaPlayerDemo1.kt/***MediaPlayer(在SurfaceView上播放)**注:无法对SurfaceView截图,如果需要对视频截图......
  • Android中怎样使用MediaPlayer播放byte数组音频文件
    场景在得到某音频文件的byte[]后使用MediaPlayer将其播放出来。注:​​关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现新建工具类方法try{......
  • 【Android 】使用MediaPlayer播放音频以及AudioManager简介
    这里主要通过MediaPlayer以及AudioManager来实现的对应的功能。1.第一种,播放本地媒体文件:你需要自己准备一个MP3格式的音频文件;然后在资源目录(res)里面新建一个raw......
  • Qt编写视频播放器(支持pbonon/qmediaplayer/ffmpeg/vlc/mpv等多种内核)
    一、前言花了一年多的时间,终于把这个超级播放器做成了自己想要的架构,用户的需求是一方面,自己架构方面的提升也是一方面,最主要是将界面和解码解耦了,这样才能动态的挂载不同......
  • android mediaPlayer error (-38,0) 解决方法
    android实现音乐播放时stop之后再次start播放音乐播放不了的解决方法报错如下:把原先的stop代码voice.stop()改成voice.pause();voice.seekTo(0);就可以了......
  • C# axWindowsMediaPlayer 多个文件循环播放
    今天在要实现一个用 C#WinForm 上 循环播放 mp4 视频在网上看了很多博主的文章。学习整理出一个可用方案。记录下来供大家参考//this.axWindowsMediaPlayer1.U......
  • QMediaPlayer,setPosition很慢
    self.video_widget=QtMultimediaWidgets.QVideoWidget()self.player=QtMultimedia.QMediaPlayer()self.player.setVideoOutput(self.video_......
  • 如何解决 QMediaPlayer 占用歌曲导致 PermissionError: [Error 13] 的问题
    问题描述当我们使用QMediaPlayer播放歌曲时,歌曲文件的句柄会被占用。如果想用使用mutagen库对正在播放地歌曲进行数据写入,就会出现下述问题:Traceback(mostrecentc......