视频播放

1控件:surfaceView
       videoView    两个控件用来播放视频

2 mediaplayer 只能播放MP4 或者3gp格式

3 surfaceView 重量级控件(用来显示控件内容 但是是耗时操作)

   内部维护了两个线程
                               a 加载数据  显示数据
                               b  显示数据   加载数据

直接可以再子线程跟新ui(必须使用声明周期的方法)



4
此案例不开线程则需要使用添加生命周期的方法
案例Demo:
public class MainActivity extends AppCompatActivity {

    private SurfaceView sfView;
    private MediaPlayer mediaPlayer;
    private SurfaceHolder sfh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sfView = (SurfaceView) findViewById(R.id.sf_view);
        sfh = sfView.getHolder();
    }

    public void doclick(View view) {

        new Thread(){
            @Override
            public void run() {
                SystemClock.sleep(400);// 此处添加线程 睡眠几秒才可出结果


                // 1 初始化mediaplayer
                mediaPlayer = new MediaPlayer();
                // 2设置播放路径  网络或者本地
                try {
                    mediaPlayer.setDataSource("http://192.168.56.1/Demo/a.mp4");
                    //3 准备
                    mediaPlayer.prepareAsync();
                    // 4 设置显示 参数类型 SurfaceHolder 通过surfaceView 的方法获得(用来维护播放内容)
                    mediaPlayer.setDisplay(sfh);
                    // 准备监听
                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            // 开始播放
                            mediaPlayer.start();
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }.start();

    }
}


不开线程就使用holder的声明周期播放

此控件播放逻辑比较繁琐 参见videoView

5  VideoView  其实就是对SurfaceView 和mediaplayer的封装


   private VideoView vvVideo;// 此控件是对SurfaceView的一个封装

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_view);
       // 找控件
        vvVideo = (VideoView) findViewById(R.id.vv_video);
        // 设置播放路径
        vvVideo.setVideoPath("http://192.168.56.1/Demo/a.mp4");
        vvVideo.start();

    }



播放一段视频要对视频解码的

window下的播放器都使用了
视频解码原理: 使用的都是一个开源项目 ffmpeg(多个c大神写的)谷歌对其进行整改

qq影音的声明例如:(本程序中包含的解码器和滤镜修改了FFmpeg(http://ffmpeg.mplayerhq.hu/)项目中的部分代码,修改的源代码可以在 http://qqplayer.qzone.qq.com/中下载到。)

你可能感兴趣的:(视频播放)