博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于VLC的视频播放器
阅读量:6113 次
发布时间:2019-06-21

本文共 3942 字,大约阅读时间需要 13 分钟。

原文:

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

  找到了一个比较合适的播放器,Github地址为 。这个播放器是基于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

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

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

 

作者:
出处:
 
本文版权归和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 
你可能感兴趣的文章
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)...
查看>>
PHP读取日志里数据方法理解
查看>>
第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码
查看>>
Vivado增量式编译
查看>>
一个很好的幻灯片效果的jquery插件--kinMaxShow
查看>>
微信支付签名配置正确,但返回-1,调不出支付界面(有的手机能调起,有的不能)...
查看>>
第二周例行报告
查看>>
Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)...
查看>>
实验八 sqlite数据库操作
查看>>
四种简单的排序算法(转)
查看>>
Quartz2D之着色器使用初步
查看>>
多线程条件
查看>>
Git [remote rejected] xxxx->xxxx <no such ref>修复了推送分支的错误
查看>>
Porter/Duff,图片加遮罩setColorFilter
查看>>
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>