前言

跳过废话,直接看正文
当年入坑Java是因为它的跨平台优势。那时我认为,”编写一次,处处运行。”应该是所有语言发展的终极之道,java势必会一统天下。
然而事实证明,那时的我还是太年轻。
正所谓鱼和熊掌不可兼得,若要享受跨平台带来的方便,便不可避免地要接受性能上的不足。事实上,java一直在致力于提高虚拟机的性能(JIT等技术),但面对对实时计算性能要求很高或涉及到用硬件优化的任务(视频的硬件编码、解码)时,仍远远比不上c或c++。因此,很少能够看到有人用java来写这类软件。
回到正题,要想写一个视频播放器,势必要处理不同的视频格式(mp4、avi、rmvb、flv等)。每一类格式的视频都必须要有对应的解码器才能播放。绝大多数解码器的库都是基于效率高的c或c++写成的,用java的写解码器的库非常少。
因此,要想用java写一个视频播放器,只有以下两个选择:
•使用纯java编写,自己编写主流视频格式的软件解码器、结合Java媒体框架(JMF)完成视频解码任务。
•使用jni调用现有的c或c++的解码器库,完成视频解码任务
使用java自己编写软件解码器的优点是能够真正地实现跨平台,也能很方便灵活地与swing框架结合。然而缺点是太过麻烦,先不说软件解码器的效率问题,各种主流视频格式的解码器的车轮能否成功地重造都是一个值得商榷的问题。
因此,我采用了第二种办法,通过jni调用现有的第三方视频解码库来完成视频解码的任务,而视频的显示、控制的逻辑则交由java来完成。这样便能够实现一个效率较高的视频播放器。值得一提的是,虽然根据平台类型来调用不同平台也能够实现跨平台,但是会受到诸多限制,这是不可避免的。
接下来便来看看具体怎么实现一个视频播放器吧。
正文
解码器的选择
视频格式有很多,解码器也有很多,因此要分别寻找对应的解码器并封装成jni接口进行调用是一个繁琐的任务,因此我们可以找一个已经封装了多种主流解码器的媒体处理框架(视频播放器)的库来直接进行调用。VLC是一个非常好的选择。
VLC media player VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。
在vlc的库上,我们要用jni进行一定的封装,从而能用java来调用视频的解码和播放控制接口。好在我们不必重造车轮。vlcj是一位国外开发者用java开发的一个媒体处理框架,底层使用的正是vlc播放器,通过jni调用vlc来完成音频的解码任务。
开发流程
•安装VLC Media Player(我安装的版本是2.2.4,最好安装到默认目录)
•建立普通maven项目,添加vlcj的依赖
<dependency> <groupId>uk.co.caprica</groupId> <artifactId>vlcj</artifactId> <version>3.10.1</version> </dependency>
•正式开发
接下来就是代码干货了,将会介绍三个项目,都是基于这个vlcj的视频播放器。
入门示例
这是vlcj作者提供的入门示例程序,能够快速实现一个简单的视频播放器,当然,仅仅是播放而已,不提供控制功能。
这里用的vlcj中提供的内嵌视频播放组件EmbeddedMediaPlayerComponent,通过其中的mediaPlayer中的playMedia方法可以直接播放视频,视频会渲染到EmbeddedMediaPlayerComponent上。EmbeddedMediaPlayerComponent这个组件中提供了很多其他功能,若要实现一个普通的视频播放器,了解这个组件便足够了。
代码
package tutorial;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.discovery.NativeDiscovery;
public class Tutorial {
private final JFrame frame;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
public static void main(final String[] args) {
new NativeDiscovery().discover();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Tutorial(args);
}
});
}
public Tutorial(String[] args) {
frame = new JFrame("My First Media Player");
frame.setBounds(100, 100, 600, 400);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
System.exit(0);
}
});
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
frame.setContentPane(mediaPlayerComponent);
frame.setVisible(true);
mediaPlayerComponent.getMediaPlayer().playMedia(args[0]);
}
}
vlcj-player
这是vlcj作者自己基于vlcj写的一个开源播放器,功能很全面,完全可以用来作为平时的视频播放器来使用。由于这个项目内容较多,不便将代码列出。
项目地址详见https://github.com/caprica/vlcj-player
javaplayer
这个是我基于vlcj写的一个简单的视频播放器,支持一些简单的视频播放控制功能和播放弹幕的功能。
开发这个播放器是出于对java编写视频播放器的好奇心,因此没有提供比较完善的功能,毕竟耗时耗力。只是结合了我之前写过的一个弹幕播放器,为这个视频播放器添加了弹幕播放的功能,方便能在播放本地视频的过程中播放b站的弹幕。
项目地址详见https://github.com/clayandgithub/javaplayer
后记
在开发过程中遇到一些坑,如视频渲染组件的透明问题,以及swing的重绘机制导致的一些界面显示上的bug。有些完全解决了,有些则只是采用曲线救国的方法解决的。如果你在开也遇到了这些问题,欢迎一起交流探讨。
附:vlcj的官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java播放器
# java视频播放器
# java视频播放
# 视频播放器
# 都是
# 播放器
# 这是
# 是一个
# 来完成
# 弹幕
# 要想
# 不可避免
# 若要
# 开源
# 过程中
# 视频播放
# 的是
# 也有
# 是因为
# 将会
# 有很多
# 要有
# 你在
相关文章:
如何在Tomcat中配置并部署网站项目?
兔展官网 在线制作,怎样制作微信请帖?
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何在IIS7中新建站点?详细步骤解析
威客平台建站流程解析:高效搭建教程与设计优化方案
如何高效搭建专业期货交易平台网站?
如何快速搭建虚拟主机网站?新手必看指南
制作企业网站建设方案,怎样建设一个公司网站?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
如何快速上传建站程序避免常见错误?
建站之星如何助力网站排名飙升?揭秘高效技巧
如何设计高效校园网站?
建站上传速度慢?如何优化加速网站加载效率?
高端企业智能建站程序:SEO优化与响应式模板定制开发
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何通过多用户协作模板快速搭建高效企业网站?
一键网站制作软件,义乌购一件代发流程?
建站主机选购指南:核心配置优化与品牌推荐方案
建站之星安装路径如何正确选择及配置?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何彻底删除建站之星生成的Banner?
微信小程序 五星评分(包括半颗星评分)实例代码
如何安全更换建站之星模板并保留数据?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
ppt制作免费网站有哪些,ppt模板免费下载网站?
图册素材网站设计制作软件,图册的导出方式有几种?
股票网站制作软件,网上股票怎么开户?
如何在IIS中配置站点IP、端口及主机头?
企业微网站怎么做,公司网站和公众号有什么区别?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
建站之星如何保障用户数据免受黑客入侵?
如何用狗爹虚拟主机快速搭建网站?
网站制作公司排行榜,四大门户网站排名?
python的本地网站制作,如何创建本地站点?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
网站制作新手教程,新手建设一个网站需要注意些什么?
建站VPS能否同时实现高效与安全翻墙?
宝塔新建站点报错如何解决?
建站之星多图banner生成与模板自定义指南
制作网站的公司有哪些,做一个公司网站要多少钱?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何通过.red域名打造高辨识度品牌网站?
如何高效完成自助建站业务培训?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何快速搭建响应式可视化网站?
建站org新手必看:2024最新搭建流程与模板选择技巧
*请认真填写需求信息,我们会在24小时内与您取得联系。