
AndroID多媒体框架支持各种常见的媒体类型,可以很容易地将音频、视频和图像集成到App中。通过MediaPlayer API,可以从应用程序资源(RAW)、文件系统或网络上数据流资源来播放音频或视频。本文演示了如何通过API播放音频和视频文件,来获得良好性能和愉快的用户体验,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点 MediaPlayer 可以用来控制audio/vIDeo文件或流播放的类。通过此类,可以方便的控制音频/视频文件的播放,暂停和停止等 *** 作。Uri 统一资源标识符(Uniform Resource IDentifIEr,或URI)是一个用于标识某一互联网资源名称的字符串。VIDeoVIEw 自带的一种播放视频的组件。SurfaceVIEw 可以通过后台绘制显示的视图组件。 Activity中播放音频页面上播放音频文件,步骤如下:
1. 准备资源文件,并播放
1 private MediaPlayer mMediaPlayer; 2 3 /** 4 * 开始 5 * @param v 6 */ 7 public voID bn_start(VIEw v){ 8 if(mMediaPlayer==null) { 9 ready();10 }11 mMediaPlayer.start();12 }13 14 15 * 创建MediaPlayer并到prepare状态16 17 private ready(){18 ){19 mMediaPlayer=new MediaPlayer();//IDle20 Log.i("TAG","ready: "+filePath);21 file file=new file(Environment.getExternalStorageDirectory(),"goldfallen.mp3");22 Log.i("TAG","ready: "+file.getPath());23 Log.i("TAG",1)">file.exists());24 Uri uri= Uri.fromfile(file);25 try {26 mMediaPlayer.setDataSource(AudioActivity.this,uri);27 mMediaPlayer.prepare();Prepared28 } catch (IOException e) {29 Log.i("TAG",1)"> e.getMessage());30 e.printstacktrace();31 }32 33 }
2. 暂停播放
1 2 * 暂停3 4 5 bn_pause(VIEw v){6 if(mMediaPlayer!=null && mMediaPlayer.isPlaying()){7 mMediaPlayer.pause();8 9 }
3. 停止
1 2 * 停止 3 4 5 bn_stop(VIEw v){ 6 7 mMediaPlayer.stop(); 8 mMediaPlayer.release(); 9 mMediaPlayer=;11 }
4. 释放资源(当页面销毁时,播放资源也要同时释放)
@OverrIDe2 protected onDestroy() {3 4 5 6 mMediaPlayer=8 super.onDestroy();9 }
5. 通过静态函数创建对象
* D:\AndroID\Project\DemoMedia\app\src\main\res\raw\A2012.mp3: * Error: 'A' is not a valID file-based resource name character: * file-based resource names must contain only lowercase a-z,0-9,or underscore 5 6 ready2(){ 7 8 mMediaPlayer= MediaPlayer.create(10 }通过服务来播放音频
当页面关闭时,音频文件还可以在后台播放。步骤如下:
1. 定义后台服务,当服务启动时,创建MediaPlayer对象,并注册服务接收对象。
class AudioService extends Service { 4 OperatorReceiver mReceiver; 6 public AudioService() { 9 @OverrIDe11 onCreate() {12 .onCreate();13 mMediaPlayer=new MediaPlayer();14 mReceiver= OperatorReceiver();15 IntentFilter filter=new IntentFilter("operator.receiver"16 registerReceiver(mReceiver,filter);17 18 19 20 IBinder onBind(Intent intent) {21 return 22 23 24 25 int onStartCommand(Intent intent,int flags,1)">int startID) {26 Log.i("TAG","onStartCommand: ----ready "27 ready();28 .onStartCommand(intent,flags,startID);29 30 32 33 34 35 36 37 38 mMediaPlayer=39 40 unregisterReceiver(mReceiver);41 42 43 44 start(){45 46 47 48 private pause(){49 mMediaPlayer.pause();50 51 52 stop(){53 mMediaPlayer.stop();54 55 56 57 58 mMediaPlayer.reset();59 60 String filePath= Environment.getExternalStorageDirectory()+"/ab2012.mp3"61 Log.i("TAG",1)">filePath);62 file file= file(filePath);63 if(file.exists()) {64 mMediaPlayer.setDataSource(filePath);65 mMediaPlayer.prepare();66 }else{67 Log.i("TAG","ready: 文件不存在 "68 69 } 70 Log.i("TAG",1)">e.getMessage());71 e.printstacktrace();72 73 74 }
2. *** 作接收者定义如下:
1 * *** 作接收器 3 4 class OperatorReceiver broadcastReceiver { 6 @OverrIDe onReceive(Context context,Intent intent) { 8 int cmd=intent.getIntExtra("cmd",-1 9 Log.i("TAG","onReceive: "+cmd);10 switch (cmd){11 case Tools.PLAY: start();13 break14 Tools.PAUSE: pause();16 17 Tools.Stop:18 stop();19 20 default:21 22 25 26 }
3. 启动服务
1 Intent intent =new Intent(this,AudioService.class2 startService(intent);
4. 前台Activity通过发送广播命令进行控制音频的播放与暂停
6 Intent intent=new Intent("operator.receiver" 7 intent.putExtra("cmd" sendbroadcast(intent); 9 Log.i("TAG","bn_start: "+"service"11 12 13 14 15 16 17 Intent intent=18 intent.putExtra("cmd"20 21 22 23 25 26 27 Intent intent=28 intent.putExtra("cmd"30 }
5.通过后台服务的方式,需要在AndroIDManifest.xml文件中进行注册
1 <service2 androID:name=".AudioService"3 androID:enabled="true"4 androID:exported="true">5 </service>通过VIDeoVIEw来播放视频
通过VIDeoVIEw进行播放视频文件,只需要设置资源URI即可,具体如下:
VIDeoVIEw mVIDeoVIEw; onCreate(Bundle savedInstanceState) { 4 .onCreate(savedInstanceState); setContentVIEw(R.layout.activity_vIDeo); 6 mVIDeoVIEw= (VIDeoVIEw) .findVIEwByID(R.ID.vv_info);设置路径 8 file file=10 if(!file.exists()){11 Log.i("TAG","onCreate: 文件不存在"13 Uri uri=Uri.fromfile(file); mVIDeoVIEw.setVIDeoURI(uri);15 设置Media Controller16 MediaController controller=new MediaController( mVIDeoVIEw.setMediaController(controller);获取焦点 mVIDeoVIEw.requestFocus(); mVIDeoVIEw.start();设置播放完成事件22 mVIDeoVIEw.setonCompletionListener( MediaPlayer.OnCompletionListener() { @OverrIDe24 onCompletion(MediaPlayer mp) {25 Toast.makeText(VIDeoActivity.26 });28 }通过MediaPlayer来播放视频
通过MediaPlayer来播放视频文件,然后通过SurfaceVIEw来显示视频内容,具体步骤如下:
1.启动,通过setdisplay来设置显示内容
public bn_start(VIEw vIEw) { 2 mMediaPlayer.reset();到IDle状态 3 4 file file= 5 Log.i("TAG",1)"> 7 Log.i("TAG",1)"> 8 } 11 Uri uri=13 mMediaPlayer.setDataSource( mMediaPlayer.setdisplay(mSurfaceVIEw.getHolder()); mMediaPlayer.prepare(); mMediaPlayer.start();17 } 20 }
2. 暂停与停止
bn_pause(VIEw vIEw){ 2 (mMediaPlayer.isPlaying()){ bn_stop(VIEw vIEw){11 }
3. 资源释放
2 8 mMediaPlayer=11 }权限设置
如果要播放视频,需要相应的权限设置,并在安装时获取请求权限
1 uses-permission ="androID.permission.INTERNET"/>="androID.permission.WRITE_EXTERNAL_STORAGE"3 ="androID.permission.READ_EXTERNAL_STORAGE"4 ="androID.permission.MOUNT_UNMOUNT_fileSYstemS"/>备注
合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。
总结
以上是内存溢出为你收集整理的一起学Android之音频视频全部内容,希望文章能够帮你解决一起学Android之音频视频所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)