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

 

时间: 2024-08-30 01:44:59

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

java中用vlc做视频播放器问题

问题描述 java中用vlc做视频播放器问题 一共两个类,第二个是界面,看别人视频做的,结果视频播放不了,求解答. public class PlayMain { static MainWindow frame; public static void main(String[] args) { NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "D:\Program Files\VideoLAN\VLC");

基于VLC的播放器开发

VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作量和难度都比较大,如果想很快能拿出一个播放器来用的,可以研究下开源的播放器,参考下射手播放器作者的文章:媒体播放器三大底层架构. 对比下现有的主流播放器:媒体播放器列表,VLC是在各个方面都表现很突出的一款.VLC 是一款免费.自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,DVD.音

100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)【转】

转自:http://blog.csdn.net/leixiaohua1020/article/details/8652605 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 简介 流程图 simplest_ffmpeg_player标准版代码 simplest_ffmpeg_player_suSU版代码 结果 FFMPEG相关学习资料 补充问题     ===================================================== 最简单的

java vlcj-基于vlcj的视频播放器,为什么无法播放视频

问题描述 基于vlcj的视频播放器,为什么无法播放视频 package demo1; import javax.swing.JFrame; import javax.swing.SwingUtilities; import com.sun.jna.Native; import com.sun.jna.NativeLibrary; import uk.co.caprica.vlcj.binding.LibVlc; import uk.co.caprica.vlcj.component.Embedd

用C/C++开发基于VLC SDK的视频播放器

在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你 是否安装了正确的解析器和解码器,即使现在有了万能解器安装包也会出现很多问题,不过自从很多开源软件的出现,比如大名鼎鼎的ffmpeg,vlc等,一 切都变得简单起来,基于ffmpeg sdk开发就不多介绍了,本文主要介绍基于 VLC SDK来开发自己的播放器,一切都是那么的简单.   1.先下载VLC player, http://www.videola

c++播放器-qt基于mplayer的多路视频播放器

问题描述 qt基于mplayer的多路视频播放器 主要功能是同步播放最多四路视频,也可以放大某一通道进行单路回放,如果单纯只为了播放就没有问题,但是在多路回放的时候我要实时显示播放进度以及进度条的跟进和进度条拉动进行视频的跳转不好实现,如果是单一通道播放就没问题,求大神指教,其他只要是基于c++的开发工具都可以,求条明路,如果可以的话,大神加我qq941290482或者留下您的QQ!

解密-新人求帮啊!C++怎样完成基于AES加密算法的音视频播放器的实现

问题描述 新人求帮啊!C++怎样完成基于AES加密算法的音视频播放器的实现 要求能满足边解密边播放边清空缓存的条件!不知到有大神能做的吗? C币神马的不是问题,可以的加Q细聊 qq:714491360

【视频处理工程】7、一个基于LavFilter的对话框视频播放器

在实现了利用控制台程序播放指定视频文件之后,接下来开始尝试编写一个带有界面的视频播放器,可以选择播放的视频,控制音量等更多的功能.为简单起见,界面的框架用MFC实现. 1.建立工程,生成默认界面 这一步很简单,打开Visual Studio 2010,选择MFC Application,选择基于对话框的工程然后一路next就完成了,没有任何需要更改的地方.之后可以编译运行,生成一个默认的对话框.对工程进行与DirectShow相关的设置,具体方法参考这里. 2.添加播放器内核类 将上文中的Dir

框架-用WPF做VLC视频播放器,如何解决.Net Framework版本的转换(只能使用2.0吗?)

问题描述 用WPF做VLC视频播放器,如何解决.Net Framework版本的转换(只能使用2.0吗?) 当进行如上调用时,会出现如下错误信息 对 PInvoke 函数"ClientLibrary.Controls.LibVlcAPI::libvlc_new"的调用导致堆栈不对称.原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配.请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配. _最开始项目是framework2.0框架,现在是framework