Android高级 SurfaceView使用

surfaceview 加载Assets下的视频,设置循环播放并取消声音
surfaceviewj加载视频的几种方法
1、加载 assets
2、加载本地文件下
3、加载网络音视频 setDataSource("http://juejin.cn/ok.mp3")

  try {
            // 创建MediaPlayer对象
            player = new MediaPlayer();
            // 设置SurfaceView自己不管理缓冲区
            getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            // 设置播放时打开屏幕
            getHolder().setKeepScreenOn(true);
            getHolder().addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    player.reset();
                    try {
                        MyLog.e("surfaceCreated:" + GUIDE_VIDEOS + File.separator + assetsName);
                        AssetFileDescriptor mDescriptor = getContext().getAssets().openFd(GUIDE_VIDEOS + File.separator + assetsName);
                        player.setDataSource(mDescriptor.getFileDescriptor(), mDescriptor.getStartOffset(), mDescriptor.getLength());
//                player.setDataSource(new File(MyApplication.getApplication().guideVideosPath, "v_guide.mp4").getAbsolutePath());
                        player.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置播放声音类型
                        player.setVolume(0,0);
                        player.setLooping(true);
                        player.setDisplay(getHolder());
//                            player.prepare();
                        player.prepareAsync();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                    MyLog.e("surfaceChanged:" + format + " :" + width + ":" + height);
                }

                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    MyLog.e("surfaceDestroyed:" + holder.toString());
//                        if (isShowing)
//                            playerRelease();
                }
            });
            player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    MyLog.d(" onPrepared : " + System.currentTimeMillis() + " :" + isShowing);
                    prepared = true;
//                        player.setPlaybackParams(player.getPlaybackParams().setSpeed(0.8f));
                    player.start();
                }
            });
            player.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    MyLog.e("what:"+what+":"+extra);
//                        player.reset();
//                        try {
//                            AssetFileDescriptor mDescriptor = getContext().getAssets().openFd(GUIDE_VIDEOS + File.separator + assetsName);
//                            player.setDataSource(mDescriptor.getFileDescriptor(), mDescriptor.getStartOffset(), mDescriptor.getLength());
//                            player.prepareAsync();
//                        } catch (IOException e) {
//                            e.printStackTrace();
//                        }
                    return false;
                }
            });
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    MyLog.d(" onCompletion=" + System.currentTimeMillis());
//                postDelayed(new Runnable() {
//                    @Override
//                    public void run() {
//                        if (isShowing) {
//                            player.seekTo(0);
//                            player.start();
//                        }
//                    }
//                }, 2000);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            MyLog.e("e:" + e.getMessage());
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Context继承关系Activity/Service/Application都是继承自ContextWrappe...
    tt2019阅读 228评论 0 0
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,783评论 0 17
  • 一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Andr...
    lucas777阅读 5,288评论 2 54
  • 在 Activity 获取字符串资源: this.getString(R.string.hello) 从 Cont...
    allencaicai阅读 984评论 0 1
  • 一. 音视频采集流程 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出。 通过摄像头和麦克风获...
    大鹏的鹏阅读 867评论 1 1