一起学Android之音频视频

一起学Android之音频视频,第1张

概述本文演示了如何通过Api播放音频和视频文件,来获得良好性能和愉快的用户体验,仅供学习分享使用,如有不足之处,还请指正。 概述

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之音频视频所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1121299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存