本文實例為大家分享了Java解碼H264格式視頻流中的圖片,供大家參考,具體內(nèi)容如下
大洼網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。成都創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
引入依賴
org.bytedeco javacv 1.4.3 org.bytedeco.javacpp-presets ffmpeg-platform 4.0.2-1.4.3
需要注意這兩個包之間的版本有一個對應(yīng)關(guān)系,如果版本不對應(yīng)可能會出問題
解碼過程
實現(xiàn)的一個簡單功能是:
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("h364"); 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í)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。