Java解码H264格式视频流中的图片

本文实例为大家分享了Java解码H264格式视频流中的图片,供大家参考,具体内容如下

引入依赖

<dependency>
  <groupId>org.bytedeco</groupId>
  <artifactId>javacv</artifactId>
  <version>1.4.3</version>
 </dependency>

 <dependency>
  <groupId>org.bytedeco.javacpp-presets</groupId>
  <artifactId>ffmpeg-platform</artifactId>
  <version>4.0.2-1.4.3</version>
</dependency>

需要注意这两个包之间的版本有一个对应关系,如果版本不对应可能会出问题

解码过程

实现的一个简单功能是:

  • 从Socket获取视频输入流(H264格式)
  • 获取视频流中的帧
  • 把每一帧转换成 BufferedImage
package com.amwalle.walle.raspi.camera;

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class CameraHandler implements Runnable {
 private static final Logger logger = LoggerFactory.getLogger(CameraHandler.class);

 private final String LOCK = "LOCK";

 private Socket cameraSocket;
 private static BufferedImage bufferedImage;

 CameraHandler(Socket socket) throws IOException {
 this.cameraSocket = socket;
 }

 String getLock() {
 return LOCK;
 }

 @Override
 public void run() {
 try {
  InputStream cameraStream = cameraSocket.getInputStream();

  FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(cameraStream);

  frameGrabber.setFrameRate(30);
  frameGrabber.setFormat("h264");
  frameGrabber.setVideoBitrate(15);
  frameGrabber.setVideoOption("preset", "ultrafast");
  frameGrabber.setNumBuffers(25000000);

  frameGrabber.start();

  Frame frame = frameGrabber.grab();

  Java2DFrameConverter converter = new Java2DFrameConverter();

  while (frame != null) {
  BufferedImage bufferedImage = converter.convert(frame);

  setBufferedImage(bufferedImage);

  synchronized (LOCK) {
   LOCK.notifyAll();
  }

  frame = frameGrabber.grab();
  }
 } catch (IOException e) {
  logger.info("Video handle error, exit ...");
  logger.info(e.getMessage());
 }
 }

 private void setBufferedImage(BufferedImage image) {
 bufferedImage = image;
 }

 BufferedImage getBufferedImage() {
 return bufferedImage;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java 8实现图片BASE64编解码

    前言 Basic编码是标准的BASE64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由字母加数字组成. 最近做了个Web模版,其中想用Base64背景图.虽然网络上有现成的编码器,但总想自己实现一个.可能很多人不知道,JDK 8新提供的Base64类可以非常方便地处理此项任务:Base64 (Java Platform SE 8 ). 一.先选一张图片 mm.png 二.建立HTML演示文件模版 test.html <!DOCTYPE html> <html>

  • Java解码H264格式视频流中的图片

    本文实例为大家分享了Java解码H264格式视频流中的图片,供大家参考,具体内容如下 引入依赖 <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.4.3</version> </dependency> <dependency> <groupId>org.byted

  • Java 添加、删除、格式化Word中的图片步骤详解( 基于Spire.Cloud.SDK for Java )

    本文介绍使用Spire.Cloud.SDK for Java提供的ImagesApi接口来操作Word中的图片.具体可通过addImage()方法添加图片.deleteImage()方法删除图片.updateImageFormat()格式化Word中的图片以及getImageFormat()获取Word中的图片格式等.操作方法和代码示例可参考下文中的步骤. 步骤1:导入jar文件 创建Maven项目程序,通过maven仓库下载导入.以IDEA为例,新建Maven项目,在pom.xml文件中配置m

  • Java如何从服务器中下载图片

    本文实例为大家分享了Java服务器中下载图片的方法,供大家参考,具体内容如下 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import org.apache.commons.io.IOUtils; /** * 从服务器中下载图片 * * @param fileName

  • 如何基于java向mysql数据库中存取图片

    这篇文章主要介绍了如何基于java向mysql数据库中存取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 学mysql的时候都是做个表格,放的也都是文字内容,虽然我知道长篇的文章和图片或者视频的都是用过文件夹的方式存储的,再讲文件路径存进数据库中.但还是想试试直接往mysql数据库中存取图片.这里我用的是java语言和jdbc实现的 mysql数据库中有一个类型是Blob类型,这是一个二进制类型,通常我们会将图片或音像文件转成二进制再存入数

  • Java 添加、替换、删除PDF中的图片的示例代码

    概述 本文介绍通过java程序向PDF文档添加图片,以及替换和删除PDF中已有的图片.另外,关于图片的操作还可参考设置PDF 图片背景.设置PDF图片水印.读取PDF中的图片.将PDF保存为图片等文章. 工具:Free Spire.PDF for Java (免费版) Jar获取及导入:官网下载,并解压将lib文件夹下的jar文件导入java程序,或者通过maven仓库下载并导入. jar导入效果: Java代码示例 [示例1]添加图片到PDF import com.spire.pdf.*; i

  • Winform中实现图片格式转换

    场景 选择一张照片并选择保存位置和要转换的图片格式实现图片格式转换. 项目运行效果 实现 新建一个窗体页面,然后设计页面布局如下 选择图片按钮点击事件中 private void toolStripButton3_Click(object sender, EventArgs e)//选择转换文件的按钮 { if (openFileDialog1.ShowDialog() == DialogResult.OK) //判断是否选择文件 { listView1.Items.Clear(); //清空l

  • 通过Java 程序获取Word中指定图片的坐标位置

    之前给大家介绍过Java解析word,获取文档中图片位置的方法,感兴趣的朋友点击查看下,今天给大家介绍如何通过Java 程序获取Word中指定图片的坐标位置,感兴趣的朋友一起看看吧! 程序运行环境: Word测试文档:.docx 2013 Free Spire.doc.jar 3.9.0 IntelliJ IDEA JDK 1.8.0 方法步骤: 1. 指定文件路径,本次测试代码路径为项目文件夹路径.即在IDEA项目文件下存入用于测试的Word文档,如:C:\Users\Administrato

  • Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】

    本文实例讲述了Java实现的上传并压缩图片功能.分享给大家供大家参考,具体如下: 先看效果: 原图:1.33M 处理后:27.4kb 关键代码: package codeGenerate.util; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.Fil

  • JAVA基于PDF box将PDF转为图片的实现方法

    在一项目中用到,本身我是.NET的,团队中有用到JAVA,故此我处理这个功能,记录以下备用. 1.引用:fontbox-2.0.16.jar.pdfbox-app-2.0.16.jar 版本一定要正确,否则代码会有问题. main函数: package kevin.cn; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.Fi

  • js获取UEditor富文本编辑器中的图片地址

    写之前在网上找了很多方法,最简单的思路应该是1.获取UEditor中的内容:2.将获取到的字符串转换成jquery对象:3.选择器找到img元素,获取src值. var content= UE.getEditor('details').getContent();//获取编辑器内容 var $div = document.createElement("div");//创建一个div元素对象 $div.innerHTML = content;//往div里填充html var $v = $

随机推荐