当前位置: 首页 > news >正文

基于VLC的视频播放器

原文: 基于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/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

相关文章:

  • [HTTP]HTTP协议的状态码
  • 福州大学第十一届程序设计竞赛
  • Android sendToTarget
  • 模板特化疑问
  • perl文件操作
  • 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
  • 机器翻译漫谈
  • 产生一个长度为100的int数组,并向其中随机插入1-100,不能重复
  • 去掉默认输入框按下时的蓝色边框
  • 阅读第8,9,10章
  • XenDesktop7.6安装部署入门教程
  • 我的视频教学之路
  • .aanva
  • 理念
  • HihoCoder第十一周:树中的最长路
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Git学习与使用心得(1)—— 初始化
  • Java比较器对数组,集合排序
  • java中的hashCode
  • Laravel Mix运行时关于es2015报错解决方案
  • leetcode46 Permutation 排列组合
  • linux安装openssl、swoole等扩展的具体步骤
  • mockjs让前端开发独立于后端
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PAT A1017 优先队列
  • 分布式熔断降级平台aegis
  • 技术:超级实用的电脑小技巧
  • 前端学习笔记之观察者模式
  • 驱动程序原理
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 移动端解决方案学习记录
  • 用jquery写贪吃蛇
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # 数据结构
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (8)STL算法之替换
  • (9)STL算法之逆转旋转
  • (Matlab)使用竞争神经网络实现数据聚类
  • (笔试题)合法字符串
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (四)c52学习之旅-流水LED灯
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)【Hibernate总结系列】使用举例
  • (转)shell调试方法
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net core控制台应用程序初识
  • .NET Framework杂记
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net经典笔试题
  • @JoinTable会自动删除关联表的数据
  • [BZOJ] 3262: 陌上花开
  • [C++][基础]1_变量、常量和基本类型