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

基于VLC的视频播放器的更多相关文章

  1. 基于VLC的视频播放器(转载)

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

  2. 自定义基于 VLC 的视频播放器

    前言(蛋疼的背景故事) 前段时间,接了一个小项目,有个需求是要在系统待机一段时间以后,循环播放 MV(类似于 Windows 系统的屏幕保护). 听到这个需求,我首先想到的是 MediaPlayer ...

  3. GJM :自定义基于 VLC 的视频播放器 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  4. 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)

    ===================================================== 最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于lib ...

  5. 基于libVLC的视频播放器

    本文来自于:http://blog.csdn.net/leixiaohua1020/article/details/42363079 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放 ...

  6. 转:最简单的基于 DirectShow 的视频播放器

    50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectSho ...

  7. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  8. 50行代码实现的一个最简单的基于 DirectShow 的视频播放器

    本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数. 直接贴上代码,具体代码的含义都写在注释中 ...

  9. 基于VLC的播放器开发

    VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作 ...

随机推荐

  1. NYOJ 1066 CO-PRIME(数论)

    CO-PRIME 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 This problem is so easy! Can you solve it? You are ...

  2. qt button以及label实现不规则图形(五种方法:使用QSS,设置Mask图片,自己画)

    1.方法1:准备一张边界是透明的不规则图形 QPushButton * pbtn = new QPushButton;    pbtn->setStyleSheet("QPushBut ...

  3. Linux下同时运行不同版本的qt程序

    因项目需要,可能有不同版本的qt程序要运行到同一台机器上,本次实验是qt4.8.5和qt5.3.1开发的程序同时运行在同一台机器上,此机器可以不按照qt的任何版本,当然,两个版本开发的qt与机器的位数 ...

  4. MFC的消息机制

    MFC的消息循环(::GetMessage,::PeekMessage)消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情 分两个步骤完成: 1 “ ...

  5. 让盘古分词支持最新的Lucene.Net 3.0.3

    原文:让盘古分词支持最新的Lucene.Net 3.0.3 好多年没升级过的Lucene.Net最近居然升级了,到了3.0.3后接口发生了很大变化,原来好多分词库都不能用了,所以上次我把MMSeg给修 ...

  6. Swift - 运算符重载和运算符函数

    让已有的运算符对自定义的类和结构进行运算或者重新定义已有运算符的运算规则,这种机制被称为运算符重载. 1,通过重载加号运算符,使自定义的两个坐标结构体对象实现相加: 1 2 3 4 5 6 7 8 9 ...

  7. jquery clone方法

    引用自http://www.w3school.com.cn/tiy/t.asp?f=jquery_manipulation_clone <html> <head> <sc ...

  8. Windbg 32位版本和64位版本的选择

    习惯了Vsiual Studio的兄弟们可能会因为先入为主的原因以为所有的调试器都应该像它那样,其实不然,当你安装Debugging Tools for Windows的时候,你将发现有两个系列的工具 ...

  9. Java经典面试题及详解

    Java基础方面:   1.作用域public,private,protected,以及不写时的区别 答:区别如下:  作用域           当前类       同一package       ...

  10. [置顶] Bug 11775332 - cluvfy fails with PRVF-5636 with DNS response timeout error [ID 11775332.8]

    Bug 11775332  cluvfy fails with PRVF-5636 withDNS response timeout error but error text is not clear ...