基于android8.1代码,只分析打开本地文件的主干流程 先看一大体流程 ? SetDataSource.png MediaPlayer.java public void setDataSource(String path) throws IOException (FileDescriptor fd, long offset, long length)方法 android_meida_MediaPlayer.cpp static void android_media_MediaPlayer_setDataSourceFD (p, p->setDataSource(fd, offset, length)); } sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre 总结 setDataSource的主要流程,主要是创建了NuPlayer,并调用NuPlayer的setDataSource.
本文链接: Android MediaPlayer 播放音频 主要介绍使用MediaPlayer播放音频的方式。 通过调用setDataSource来设置音源。 setDataSource有多个重载方法,我们来看常用的几种。 例如设置使用assets里的资源。实际情况可能需要try catch。 更多参考: Android MediaPlayer 基础简介 Android MediaPlayer 播放音频 Android 使用URLConnection下载音频文件 Android MediaPlayer 音频倍速播放,调整播放速度 Android音视频相关文章请参考 https://rustfisher.com/tags/Android-Media/
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
cn.lanol.studykongjian W/VideoView: Unable to open content: https://pan.lanol.cn/视频地址.mp4 java.io.IOException: setDataSource at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1175) at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1162) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1079) at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1100) at android.widget.VideoView.openVideo ; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment;
Android应用面向的是普通个人用户,这些用户往往会更加关注用户体验,因此为Android应用增加动画、视频、音乐等多媒体功能十分必要。 Android提供了常见音频、视频的编码、解码机制,就像之前所用过的MediaPlayer类,Android支持的音频格式有MP3、WAV和3GP等,支持的视频格式有MP4和3GP等。 setDataSource(Stringpath):指定装载path路径所代表的文件。 setDataSource(FileDescriptorfd):指定装载fd所代表的文件。 setDataSource(Contextcontext, Uri uri):指定装载uri所代表的文件。 本文摘自《疯狂Android讲义(第3版)》
关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。 为了方便表达,定义变量名为mediaPlayer。 通过调用setDataSource来设置音源。 HTTP traffic to demo.com not permitted 可以简单地设置一下manifest,设置usesCleartextTraffic=”true” <application android } catch (IOException e1) { Log.e(TAG, "url: ", e1); } } 代码可以参考示例工程: https://github.com/RustFisher/android-MediaPlayer 总结 以上所述是小编给大家介绍的Android MediaPlayer 播放音频的方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
MediaStore类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。 下面那些叙述是正确的() http://android.xsoftlab.net/reference/android/provider/package-summary.html http://blog.csdn.net http://android.xsoftlab.net/reference/android/provider/MediaStore.html 您的回答为:EXTRA_SIZE_LIMIT:设置媒体文件最小的大小 MediapLayer的setDataSource的重载方法有多个,适用于不同的媒体数据来源,下面哪个是错误的? http://android.xsoftlab.net/reference/android/media/MediaPlayer.html 您的回答为:void setOnClickListener
Android2.3时引入流媒体框架,而流媒体框架的核心是NuPlayer。 Android4.0之后HttpLive和RTSP协议开始使用NuPlayer播放器,Android5.0(L版本)之后本地播放也开始使用NuPlayer播放器。 Android7.0(N版本)则完全去掉了Awesomeplayer。 下图为结构关系图 NuPlayer 主要用于处理流媒体播放,自然会涉及通过不同流媒体协议传输过来的数据,并有对应的解析和处理逻辑,下面看看NuPlayer的类关系图 Android层的多媒体框架 构造 NuPlayer 的构建呢,是在上层调用 setDataSource函数后,到达 MediaPlayerService中的 setDataSource函数,通过getPlayerType函数获取播放器类型
MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url) { int32_t connId = android_atomic_inc ::Client::setDataSource(const char *url) { if (strncmp(url, "content://", 10) == 0) { //不太明确 (fd) method String16 url16(url); int fd = android::openContentProviderFile(url16); 有时候会认为android这种设计实在太复杂了,调用起来太麻烦,直接实现一个IMediaPlayer的类不就完了吗。 PVPlayer的申明在frameworks/base/include/media/PVPlayer.h中,而实如今external/opencore/android/playerdriver.cpp。
方法名 功能描述 setDataSource() 设置要播放的音频文件的位置。 prepare() 在开始播放之前调用这个方法完成准备工作。 start() 开始或继续播放音频。 首先需要创建出一个 MediaPlayer 对象,然后调用 setDataSource()方法来设置音频文件的路径,再调用 prepare()方法使 MediaPlayer 进入到准备状态,接下来调用 ="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height ) { try { File file = new File(Environment.getExternalStorageDirectory(), "music.mp3"); mediaPlayer.setDataSource 后 面 依 次 调 用 了 setDataSource()方法和 prepare()方法为 MediaPlayer 做好了播放前的准备。 接下来我们看一下各个按钮的点击事件中的代码。
这个是ijkplayer_jni做的 static JNINativeMethod g_methods[] = { { "_setDataSource", "(Ljava }, { "_setDataSourceFd", "(I)V", (void *) IjkMediaPlayer_setDataSourceFd }, { "_setDataSource (mAppContext, mUri, mHeaders); } else { mMediaPlayer.setDataSource(mUri.toString /ijkplayer_android.c IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*)) { IjkMediaPlayer 回到openVedio函数内mMediaPlayer.setDataSource(), 到c层的ijkmedia/ijkplayer/android/ijkplayer_jni.c IjkMediaPlayer_setDataSourceAndHeaders
www.musicbox.com/sound/bg.mp3”); 使用creat()方法时,已经加载了音频,但是用无参构造方法来创建MediaPlayer对象时,需要单独指定要装载的资源,这可以使用MediaPlayer类的setDataSource 在使用setDataSource()方法装载音频文件后,实际上MediaPlayer并为真正装载该音频文件,需要调用MediaPlayer的prepare()方法去真正装载音频文件。 使用无参构造方法来创建MediaPlayer对象并装载指定的音频文件,可以使用下面的代码: MediaPlayer player=new MediaPlayer(); try { player.setDataSource <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com arg0) { play();//重新开始播放 } }); } //播放音乐的方法 public void play(){ try { player.reset(); player.setDataSource
MediaPlayer MediaPlayer 简介 Android提供的多媒体框架支持播放各种常见媒体类型,可以轻松地将音频、视频和图像集成到应用程序中。 通过setOnErrorListener(android.media.MediaPlayer.OnErrorListener)可以设置该监听器。 ("/sdcard/test.mp3"); 网络上的媒体文件 例如:mp.setDataSource("http:/xxx.yif.mp3"); MediaPlayer的setDataSource一共四个方法 : setDataSource (String path) setDataSource (FileDescriptor fd) setDataSource (Context context, Uri uri) setDataSource (FileDescriptor fd, long offset, long length)
这里面主要的client和service实现类是以下两个文件(Android8.1 路径) frameworks/av/media/libmedia/mediaplayer.cpp frameworks status_t MediaPlayer::setDataSource( const sp<IMediaHTTPService> &httpService, const char *url, const KeyedVector<String8, String8> *headers) { ALOGV("setDataSource(%s)", url); = player->setDataSource(httpService, url, headers))) { player.clear(); } sm->getService(String16("media.player")); 通过ServiceManager获取到 MediaPlayerService,MediaPlayerService在android
2、调用setDataSource方法设置MediaPlayer对象播放的媒体文件的路径 3、调用prepare() 方法准备媒体文件播放 4、调用start() 方法播放媒体文件 这里给出MediaPlayer 类常用的方法: setDatasource(String path) 用于设置要播放的媒体文件的位置path 是媒体文件的绝对路径。 > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=" android.opengl.Visibility; import android.os.Bundle; import android.view.Surface; import android.view.SurfaceHolder Toast.LENGTH_SHORT).show(); return ; } try { mediaPlayer.setDataSource
android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.support.annotation.Nullable ; import android.support.v4.app.Fragment; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Surface; import android.view.TextureView; import android.view.View mediaPlayer.pause(); mediaPlayer.reset(); try { String path = paths[mIndex % paths.length]; mIndex++; mediaPlayer.setDataSource public void testPlay() { // mediaPlayer.pause(); // mediaPlayer.reset(); // // try { // mediaPlayer.setDataSource
Environment.getExternalStorageDirectory(),"a.mp3"); player =new MediaPlayer(); try { //设置播放源 player.setDataSource ; import android.os.Environment; import android.os.IBinder; import android.util.Log; public class myService Environment.getExternalStorageDirectory(),"a.mp3"); player =new MediaPlayer(); try { //设置播放源 player.setDataSource ="http://schemas.android.com/apk/res/android" package="com.example.playMusic" android:versionCode android:label="@string/app_name" android:theme="@style/AppTheme" <activity android:name
分享给大家供大家参考,具体如下: 1、Android的震动实现——Vibrator类 (1)实现震动,首先要加上使用震动所需的权限 <uses-permission android:name="android.permission.VIBRATE 的振铃实现——MediaPlayer类 (1)需要用到的API void setDataSource (Context context , Uri uri)//根据Uri设置音频,当然还有其他几个重载的方法来指定特定的音频 RingtoneManager.TYPE_RINGTONE);//用于获取手机默认铃声的Uri mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource 更多关于Android相关内容感兴趣的读者可查看本站专题:《Android硬件相关操作与应用总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android 基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》 希望本文所述对大家Android程序设计有所帮助。
扫码关注腾讯云开发者
领取腾讯云代金券