目前因為專案需要,會將透過 rtsp 接收相機的影像到前端顯示,流程大致如下
camera -> rtsp -> rtp(h264) -> fmp4 (h264) -> ws -> media source
參考的 repo 是這份 https://github.com/deepch/RTSPtoWSMP4f ,因此直接將影像轉成 fmp4 格式傳給前端顯示目前可以正常運作。
但我還想要降低相機畫質節省頻寬 (e.g. 1080p -> 720p),會是在後端 (golang) 執行這個工作,預想中應該是在上述流程加上幾個步驟,變成下面的樣子
camera -> rtsp -> rtp(h264) -> decoding -> resize -> encoding -> fmp4 (h264) -> ws -> media source
目前理解 ffmpeg/gstreamer 可以用來編解碼,opencv 可以用來提取畫面中的資訊且 opencv 有些編解碼的功能其底層使用的其實也是 ffmpeg。
這三種工具很強大,不過共通點是需要額外安裝,多數 golang 的套件也只是對這些工具做封裝而已,還是需要安裝對應的工具才能使用。
想問問大家在影像串流的專案經驗中,是否多為直接使用這三種工具協助處理影像編解碼、降低畫質等工作?若是的話會是直接用 cli 呼叫的形式取 stdout 還是呼叫包好的套件呢?
或者是使用完全由 golang 實作編解碼、降畫質等動作的套件而不是使用依賴這些需要額外安裝工具的套件?若是的話懇請分享 repo,目前還沒找到這種套件🥲