在JFrame窗口中使用javaCV库实现视频拉流播放
开发准备
- javaCV jar包
javacv1.1及以上版本即可,可下载到本地,https://pan.baidu.com/s/14iYx_zmcRM73AV49VjOI6w
提取码:1phf
主要导入javacv、javacpp、opencv(windows)、ffmpeg(windows)
拉流
- 拉流利用了javaCV封装的ffmpeg,使用库中的FFmpegFrameGrabber类完成拉流:
- 首先引用FFmpegFrameGrabber,在实例化时输入视频源地址字符串
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(“url”); - 开始拉流,使用start方法
grabber.start(); - 获取视频流的帧,使用grab方法,得到的为Frame类型的帧
Frame frame = grabber.grab();
帧处理
- 将Frame类型转换为Iconimage类型,用于后续播放,此处使用Java2DFrameConverter类中的convert方法,将frame转换为image
Java2DFrameConverter converter = new Java2DFrameConverter();
Image image = converter.convert(frame);
ImageIcon iconimage = new ImageIcon(image); // image to iconimage
播放
- 创建JFrame窗体,在窗体中添加显示图片的标签,开启线程不断刷新即可
- 创建JFrame窗体
- 在JFrame窗体中添加Jlabel,显示此帧的画面
label.setIcon(iconimage); - 开启线程,不断刷新label中的图片,就完成了视频的拉流播放。
class Thread_video extends Thread{
public void run() {
while(true) {
try {
frame=grabber.grab(); //one frame by one frame from buffer, not real time frame
image = converter.convert(frame);
} catch (Exception e) {
e.printStackTrace();}
iconimage = new ImageIcon(image);
label_video.setIcon(iconimage);
}
}
}
效果
使用ffmpeg工具直接推流本地摄像头到云服务器,通过此方式拉https视频实时流,初步完成了视频的拉流播放,在直接使用此方法,没有对解码进行配置的情况下,配置最小延迟推流,总延迟在200ms左右