• 基于VLC的视频播放器


      最近在研究视频播放的功能,之前是使用VideoView。在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性很大。

      找到了一个比较合适的播放器,Github地址为https://github.com/xiaomo/AndroidPlayerLibrary 。这个播放器是基于vlc这个软件,在将我们的demo导入到Eclipse中之后,可以发现,这样一个libvlc文件夹。

      在Media这个类中我们可以发现,这些是支持的格式还是比较多的。

    String[] video_extensions = {
                    ".3g2", ".3gp", ".3gp2", ".3gpp", ".amv", ".asf", ".avi", ".divx", ".drc", ".dv",
                    ".f4v", ".flv", ".gvi", ".gxf", ".ismv", ".iso", ".m1v", ".m2v", ".m2t", ".m2ts",
                    ".m4v", ".mkv", ".mov", ".mp2", ".mp2v", ".mp4", ".mp4v", ".mpe", ".mpeg",
                    ".mpeg1", ".mpeg2", ".mpeg4", ".mpg", ".mpv2", ".mts", ".mtv", ".mxf", ".mxg",
                    ".nsv", ".nut", ".nuv", ".ogm", ".ogv", ".ogx", ".ps", ".rec", ".rm", ".rmvb",
                    ".tod", ".ts", ".tts", ".vob", ".vro", ".webm", ".wm", ".wmv", ".wtv", ".xesc" };
    
    String[] audio_extensions = {
                    ".3ga", ".a52", ".aac", ".ac3", ".adt", ".adts", ".aif", ".aifc", ".aiff", ".amr",
                    ".aob", ".ape", ".awb", ".caf", ".dts", ".flac", ".it", ".m4a", ".m4b", ".m4p",
                    ".mid", ".mka", ".mlp", ".mod", ".mpa", ".mp1", ".mp2", ".mp3", ".mpc", ".mpga",
                    ".oga", ".ogg", ".oma", ".opus", ".ra", ".ram", ".rmi", ".s3m", ".spx", ".tta",
                    ".voc", ".vqf", ".w64", ".wav", ".wma", ".wv", ".xa", ".xm" };

      在这个例子中它自己写了一个PlayerActivity和PlayerView,在PlayerView中实现了libvlc中的IVideoPlayer接口

     

      在PlayerActivity中实现PlayerView类,从而进行界面和流程的控制。

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mUrl = getIntent().getStringExtra("url");
            if (TextUtils.isEmpty(mUrl)) {
                Toast.makeText(this, "error:no url in intent!", Toast.LENGTH_SHORT).show();
                return;
            }
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            setContentView(R.layout.activity_player);
    
            mHandler = new Handler(this);
    
            tvTitle = (TextView) findViewById(R.id.tv_title);
            tvTime = (TextView) findViewById(R.id.tv_time);
            tvLength = (TextView) findViewById(R.id.tv_length);
            sbVideo = (SeekBar) findViewById(R.id.sb_video);
            sbVideo.setOnSeekBarChangeListener(this);
            ibLock = (ImageButton) findViewById(R.id.ib_lock);
            ibLock.setOnClickListener(this);
            ibBackward = (ImageButton) findViewById(R.id.ib_backward);
            ibBackward.setOnClickListener(this);
            ibPlay = (ImageButton) findViewById(R.id.ib_play);
            ibPlay.setOnClickListener(this);
            ibFarward = (ImageButton) findViewById(R.id.ib_forward);
            ibFarward.setOnClickListener(this);
            ibSize = (ImageButton) findViewById(R.id.ib_size);
            ibSize.setOnClickListener(this);
    
            llOverlay = findViewById(R.id.ll_overlay);
            rlOverlayTitle = findViewById(R.id.rl_title);
    
            rlLoading = findViewById(R.id.rl_loading);
            tvBuffer = (TextView) findViewById(R.id.tv_buffer);
            //使用步骤
            //第一步 :通过findViewById或者new PlayerView()得到mPlayerView对象
            //mPlayerView= new PlayerView(PlayerActivity.this);
            mPlayerView = (PlayerView) findViewById(R.id.pv_video);
    
            //第二步:设置参数,毫秒为单位
            mPlayerView.setNetWorkCache(20000);
    
            //第三步:初始化播放器
            mPlayerView.initPlayer(mUrl);
    
            //第四步:设置事件监听,监听缓冲进度等
            mPlayerView.setOnChangeListener(this);
    
            //第五步:开始播放
            mPlayerView.start();
    
            //init view
            tvTitle.setText(mUrl);
            showLoading();
            hideOverlay();
    
        }

      关于如何使用这个类库

      库两种使用方式:

    第一种,直接new一个PlayerView或者在布局文件的xml里面嵌入view。

    第二种,跳转到一个写好的播放页面PlayerActivity (本地文件参数格式:file:///sacard/test.rmvb。)

      这里我选择了第二种方法

    startActivity(new Intent(this, PlayerActivity.class).putExtra("url", items.get(position)));

      通过一个选择列表的形式,点击每一项,传递一个url到PlayerActivity

      选择列表中的1.2JDK下载.mp4

      横竖屏的切换也是没有问题的。 

      如果大家有好的播放器,也欢迎大家和我交流。

     

    作者:杰瑞教育
    出处:http://www.cnblogs.com/jerehedu/ 
    本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
     
  • 相关阅读:
    设计模式学习笔记之设计原则
    设计模式学习笔记之生成器模式
    设计模式学习笔记之适配器模式、外观模式
    java中的日期类型之间转换
    JS刷新当前页面的几种方法总结
    Java_枚举
    动态规划详解_2
    Java算法-动态规划详解
    Java经典算法题_2
    Java算法
  • 原文地址:https://www.cnblogs.com/jerehedu/p/4502382.html
Copyright © 2020-2023  润新知