Java解碼H264格式視頻流中的圖片
更新時間:2020年02月12日 08:54:55 作者:weixin_42534940
這篇文章主要為大家詳細介紹了Java解碼H264格式視頻流中的圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Java解碼H264格式視頻流中的圖片,供大家參考,具體內(nèi)容如下
引入依賴
<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>
需要注意這兩個包之間的版本有一個對應(yīng)關(guān)系,如果版本不對應(yīng)可能會出問題
解碼過程
實現(xiàn)的一個簡單功能是:
- 從Socket獲取視頻輸入流(H264格式)
- 獲取視頻流中的幀
- 把每一幀轉(zhuǎn)換成 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;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ)
- java8使用流的filter來篩選數(shù)據(jù)的實現(xiàn)
- Java Stream流之求和的實現(xiàn)
- java使用IO流對數(shù)組排序?qū)嵗v解
- java使用ffmpeg實現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)
- java使用ffmpeg處理視頻的方法
- 使用Java和ffmpeg把音頻和視頻合成視頻的操作方法
- java使用FFmpeg合成視頻和音頻并獲取視頻中的音頻等操作(實例代碼詳解)
- Java 使用 FFmpeg 處理視頻文件示例代碼詳解
- JavaCV獲取視頻文件時長的方法
- Java使用OpenCV3.2實現(xiàn)視頻讀取與播放
- Java Red5服務(wù)器實現(xiàn)流媒體視頻播放
相關(guān)文章
java:程序包javafx.geometry不存在問題及解決
這篇文章主要介紹了java:程序包javafx.geometry不存在問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
詳解Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性
Chrome 51 開始,瀏覽器的 Cookie 新增加了一個SameSite屬性,用來防止 CSRF 攻擊和用戶追蹤。今天通過本文給大家介紹Springboot應(yīng)用中設(shè)置Cookie的SameSite屬性,感興趣的朋友一起看看吧2022-01-01
JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作
這篇文章主要介紹了JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java讀取制表符文本轉(zhuǎn)換為JSON實現(xiàn)實例
在Java開發(fā)中,處理各種數(shù)據(jù)格式是常見的任務(wù),本文將介紹如何使用Java讀取制表符文本文件,并將其轉(zhuǎn)換為JSON格式,以便于后續(xù)的數(shù)據(jù)處理和分析,我們將使用Java中的相關(guān)庫來實現(xiàn)這個過程,并提供詳細的代碼示例2024-01-01

