• android 98 MediaPlayer+SurfaceView播放视频


    package com.itheima.videoplayer;
    
    import java.io.IOException;
    
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.SurfaceView;
    
    public class MainActivity extends Activity {
        private MediaPlayer player;//只能播放MP4和3gp格式视频
        static int currentPosition;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);//SurfaceView标签要先显示在页面才能使用,因此要另外开启一个线程睡一会让布局生成了再去使用SurfaceView对象。
            SurfaceView sv = (SurfaceView) findViewById(R.id.sv);//视频播放画面
            //拿到surfaceview的控制器
            final SurfaceHolder sh = sv.getHolder();
    //        Thread t = new Thread(){
    //            @Override
    //            public void run() {
    //                try {
    //                    sleep(200);        //200毫秒不能写死
    //                } catch (InterruptedException e) {
    //                    e.printStackTrace();
    //                }
    //                runOnUiThread(new Runnable() {   //在主线程去执行
    //                    @Override
    //                    public void run() {
    //                        MediaPlayer player = new MediaPlayer();
    //                        player.reset();
    //                        try {
    //                            player.setDataSource("sdcard/2.3gp");
    //                            player.setDisplay(sh);
    //                            player.prepare();
    //                            player.start();
    //                        } catch (Exception e) {
    //                            e.printStackTrace();
    //                        } 
    //                    }
    //                });
    //            }
    //        };
    //        t.start();
            sh.addCallback(new Callback() {
                //surfaceView销毁时调用
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    //每次surfaceview销毁时,同时停止播放视频
                    if(player != null){
                        currentPosition = player.getCurrentPosition();
                        player.stop();
                        player.release();
                        player = null;
                    }
                }
                //surfaceView创建时调用surfaceView可见时调用
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    //每次surfaceView创建时才去播放视频
                    if(player == null){
                        player = new MediaPlayer();
                        player.reset();
                        try {
                            player.setDataSource("sdcard/2.3gp");
                            player.setDisplay(sh);
                            player.prepare();
                            player.start();
                            player.seekTo(currentPosition);
                        } catch (Exception e) {
                            e.printStackTrace();
                        } 
                    }
                }
                //surfaceView结构改变时调用
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width,
                        int height) {
                }
            });
        }
    }
    /*页面:
    <SurfaceView
        android:id="@+id/sv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />
    ---
    #视频播放器
    ##SurfaceView
    * 对画面的实时更新要求较高
    * 双缓冲技术:内存中有两个画布,A画布显示至屏幕,B画布在内存中绘制下一帧画面,绘制完毕后B显示至屏幕,A在内存中继续绘制下一帧画面
    * 播放视频也是用MediaPlayer,不过跟音频不同,要设置显示在哪个SurfaceView
     */

     vitamio播放视频:

    package com.itheima.videoview;
    
    import io.vov.vitamio.LibsChecker;
    import io.vov.vitamio.widget.MediaController;
    import io.vov.vitamio.widget.VideoView;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //检测是否支持vitamio,没有安装就安装
            if (!LibsChecker.checkVitamioLibs(this)) {return;}
            VideoView vv = (VideoView) findViewById(R.id.vv);
            vv.setVideoPath("sdcard/4.rmvb");
            vv.start();
            vv.setMediaController(new MediaController(this));//视频播放控制器
        }
    }
    /*
    ###SurfaceView
    * 双缓冲技术
    * 重量级组件(占用资源多)
    * 只要不可见,就不会创建,可见时,才会创建
    * 只要不可见,就会销毁
    ### FFMPEG
    * 开源免费的音视频编解码器,用C语言开发。
    ### Vitamio
    * 封装了FFMPEG的视频播放框架
    * 对外提供的api全部都是javaApi*/
    /*<io.vov.vitamio.widget.VideoView
        android:id="@+id/vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />*/
    //清单文件:<activity android:name="io.vov.vitamio.activity.InitActivity"></activity>

                    

  • 相关阅读:
    启动Kafka
    利用Flume将本地文件数据中收集到HDFS
    集群安装hbase
    安装并配置hive
    python文件引用其他文件中的变量
    模拟用户登录爬取淘宝数据
    信息领域热词分析系统--详细设计说明书
    信息领域热词分析系统--词云
    《TCP/IP详解卷1:协议》——第4章 ARP:地址解析协议(转载)
    深入理解计算机系统——第12章:多线程中共享变量
  • 原文地址:https://www.cnblogs.com/yaowen/p/4966674.html
Copyright © 2020-2023  润新知