將海康威視攝像頭SDK視頻流集成到vue前端項目
本文介紹如何將海康威視攝像頭SDK獲取的視頻流整合到Vue前端項目中。傳統的海康SDK Demo通常基于Java Swing,需要將其適配到Vue環境。本文采用spring Boot后端處理視頻流,并借助本地流媒體服務器ZLMediaKit實現前端播放。
開發環境
本方案基于攝像頭直連本地電腦的開發環境,使用spring boot框架,不依賴云視頻服務。
技術方案
后端Spring Boot應用使用海康SDK獲取視頻流,并將數據推送到ZLMediaKit流媒體服務器。Vue前端項目則從ZLMediaKit拉取RTSP流進行播放。
后端代碼結構
后端EquipmentHikvisionServiceImpl服務類負責初始化和連接海康設備。關鍵代碼片段如下:
立即學習“前端免費學習筆記(深入)”;
@Service public class EquipmentHikvisionServiceImpl implements EquipmentHikvisionService { @Override @PostConstruct public void register() { ClientHikvision clientHikvision = new ClientHikvision(); clientHikvision.initPipedStream(); clientHikvision.clientInit(); clientHikvision.action(); } }
ClientHikvision類負責SDK初始化、設備連接等操作:
public class ClientHikvision { ExecutorService executor = Executors.newFixedThreadPool(5); // ... other variables ... // 初始化管道流 public void initPipedStream() { // ... } // 初始化SDK public void clientInit() { // ... } // 注冊設備 public void register() { // ... } // 執行預覽 public void action() { // ... } }
ClientHikvision包含內部類RealDataCallback處理預覽回調數據:
class RealDataCallback implements HCNetSDK.FRealDataCallBack_V30 { @Override public void invoke(int lRealHandle, int dwDataType, ByteByReference pBuffer, int dwBufSize, Pointer pUser) { if (dwDataType == HCNetSDK.NET_DVR_STREAMDATA) { if (dwBufSize > 0) { executor.execute(() -> push(pBuffer.getPointer().getByteBuffer(0, dwBufSize).array(), dwBufSize)); } } } }
視頻流推送
獲取視頻流后,將其推送到ZLMediaKit:
public void push(byte[] data, int size) { try { outputStream.write(data, 0, size); handle(); } catch (IOException | InterruptedException e) { // ... error handling ... } } public void handle() throws InterruptedException, IOException { // ... 使用ffmpegFrameGrabber和FFmpegFrameRecorder推流到ZLMediaKit ... }
前端vue項目集成
Vue前端通過http請求獲取視頻流。后端使用FFmpeg將RTSP流轉碼為FLV格式,并推送給前端播放器。
- 前端請求: Vue項目發送HTTP請求獲取視頻流。
- 后端處理: Spring Boot后端使用FFmpeg處理RTSP流,轉碼為FLV。
- FLV推送: 后端將FLV流推送到前端。
- 前端播放: Vue前端使用FLV播放器播放接收到的FLV流。
此方案類似于直播平臺的HTTP-FLV方案,實現實時視頻流播放。 通過以上步驟,即可實現海康威視攝像頭SDK視頻流在Vue前端項目的實時顯示。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END