Android视频播放器的来世今生

xiaoxiao2021-02-28  92

android音视频探究 1 获取mediaplayer 实例          final MediaPlayer mediaPlayer = new MediaPlayer();         //[2]设置你要播放的音频资源的路径    path:可以是网络路径 也可以是本地路径         try {             mediaPlayer.setDataSource("http://169.254.87.250:8080/xpg.mp3");             //[3]准备播放             //mediaPlayer.prepare();             mediaPlayer.prepareAsync();             mediaPlayer.setOnPreparedListener(new OnPreparedListener() {                 @Override                 public void onPrepared(MediaPlayer mp) {                     //[4]开始播放                      mediaPlayer.start();                 }             });         } catch (Exception e) {             e.printStackTrace();         }     } 2 surfaceview介绍    补充:native方法:是c或者c++实现的 c语言已经帮我们开了子线程   所以我们不用开子线程了    注意:播放视频  只支持3gp  或者 MP4格式   rmvb avi    [1]surfaceView 是一个重量级控件      [2]内部维护了2个线程  A  ----加载数据 ----显示数据                        B  ----负责显示  ---加载数据     [3]可以直接在子线程更新ui     实现代码        private MediaPlayer mediaPlayer;     private int currentPosition; //当前视频播放的位置      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);         // [1.1]获取 surfaceHolder         SurfaceHolder holder = sfv.getHolder();         holder.addCallback(new Callback() {             //sufrfaceView销毁了             @Override             public void surfaceDestroyed(SurfaceHolder holder) {                 System.out.println("surfaceDestroyed");                 if (mediaPlayer!=null && mediaPlayer.isPlaying()) {                     //正在播放                      //获取到当前播放的位置                      currentPosition = mediaPlayer.getCurrentPosition();                     //停止播放                      mediaPlayer.stop();                 }             }             //说明sufrfaceView 准备好了              @Override             public void surfaceCreated(SurfaceHolder holder) {                 //在这个方法里面去播放视频                 try {                     // [1]获取mediaplayer 实例                      mediaPlayer = new MediaPlayer();                     mediaPlayer.setDataSource("http://169.254.87.250:8080/cc.MP4");                     // [3]准备播放                     mediaPlayer.prepareAsync();                     // [3.1]设置视频播放的内容 显示的位置 surfaceHolder 用来维护视频的内容                     mediaPlayer.setDisplay(holder);                     mediaPlayer.setOnPreparedListener(new OnPreparedListener() {                         @Override                         public void onPrepared(MediaPlayer mp) {                             // [4]开始播放                             mediaPlayer.start();                                                          //[5]继续上次的位置继续播放                              mediaPlayer.seekTo(currentPosition);                         }                     });                 } catch (Exception e) {                     e.printStackTrace();                 }             }             @Override             public void surfaceChanged(SurfaceHolder holder, int format, int width,                     int height) {             }         });     } 3 videoView控件的使用     2行代码搞定     videoView是对 SurfaceView 和 mediaPlayer 的封装  github优秀控件:https://github.com/lipangit/JieCaoVideoPlayer 4 vitamio      打造万能的视频播放器      类库     解码的原理:使用的是ffmpeg这样的一个开源项  vitamio官网:https://www.vitamio.org/docs/Tutorial/2014/0423/32.html github优秀控件:https://github.com/yixia/VitamioBundle/tree/v3.0
转载请注明原文地址: https://www.6miu.com/read-49293.html

最新回复(0)