前言

跳过废话,直接看正文
当年入坑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视频播放
# 视频播放器
# 都是
# 播放器
# 这是
# 是一个
# 来完成
# 弹幕
# 要想
# 不可避免
# 若要
# 开源
# 过程中
# 视频播放
# 的是
# 也有
# 是因为
# 将会
# 有很多
# 要有
# 你在
相关文章:
如何自定义建站之星模板颜色并下载新样式?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
教程网站设计制作软件,怎么创建自己的一个网站?
淘宝制作网站有哪些,淘宝网官网主页?
制作网站外包平台,自动化接单网站有哪些?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
设计网站制作公司有哪些,制作网页教程?
建站之星如何配置系统实现高效建站?
C#如何在一个XML文件中查找并替换文本内容
制作国外网站的软件,国外有哪些比较优质的网站推荐?
平台云上自助建站如何快速打造专业网站?
建站主机类型有哪些?如何正确选型
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
成都网站制作报价公司,成都工业用气开户费用?
高端建站如何打造兼具美学与转化的品牌官网?
网站制作价目表怎么做,珍爱网婚介费用多少?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站主机是什么?如何选择适合的建站主机?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
已有域名和空间如何快速搭建网站?
网站网页制作专业公司,怎样制作自己的网页?
如何选购建站域名与空间?自助平台全解析
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何通过万网虚拟主机快速搭建网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
建站之星如何防范黑客攻击与数据泄露?
无锡营销型网站制作公司,无锡网选车牌流程?
实例解析Array和String方法
网站制作的步骤包括,正确网址格式怎么写?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何配置IIS站点权限与局域网访问?
网站按钮制作软件,如何实现网页中按钮的自动点击?
高端建站三要素:定制模板、企业官网与响应式设计优化
建站之星2.7模板快速切换与批量管理功能操作指南
如何配置支付宝与微信支付功能?
专业网站建设制作报价,网页设计制作要考什么证?
为什么Go需要go mod文件_Go go mod文件作用说明
制作企业网站建设方案,怎样建设一个公司网站?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
如何通过网站建站时间优化SEO与用户体验?
定制建站价位费用解析与套餐推荐全攻略
C++如何编写函数模板?(泛型编程入门)
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
深圳网站制作案例,网页的相关名词有哪些?
智能起名网站制作软件有哪些,制作logo的软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。