# Video Streaming :::info * Axis P1465-LE 僅支援 H.264 / H.265(RTSP/HTTP)與 MJPEG 等主流串流格式,無法直接由攝影機本身產出 WebRTC 串流。 ::: * **主流瀏覽器支援的串流格式技術參數對照表** | 格式/協定 | 技術參數 | 主要支援瀏覽器 | | -------- | -------- | -------- | | HLS (HTTP Live Streaming) | 使用 M3U8 播放列表分段傳輸TS格式,支援多碼率自適應(AVBR),延遲約10-30秒 | Safari全版本、Chrome/Edge/Firefox需部分外掛或特定設定 | | MPEG-DASH | 基於 XML 的 MPD 清單,支援 CMAF 封裝與多編碼格式 (含H.264/AVC、H.265/HEVC),延遲可優化至3-5秒 | Chrome、Edge、Firefox需搭配Media Source Extensions(MSE) | | **WebRTC** | 使用 SRTP/SRTCP 加密,支援 VP8/VP9/H.264 編碼,延遲低於 500ms,解析度最高4K@60fps | Chrome/Edge/Firefox/Safari全支援 | | RTMP | 基於 TCP 的專有協議,使用 FLV 封裝格式,延遲1-3秒,需Flash外掛(已淘汰) | 現代瀏覽器需透過轉接層(如hls.js)兼容 | | VP9 | 開放編碼格式,支援 8K@60fps,10/12bit色深,壓縮率較 H.265 高約 30% | Chrome/Edge/Firefox全支援,Safari需macOS High Sierra+ | | **AV1** | 新一代開放格式,支援 8K@120fps,HDR10+,壓縮效率較VP9提升30% | Chrome/Edge/Firefox(需v96+),Safari需macOS Monterey+ | | **H.264/AVC** | 主流編碼,支援 1080p@60fps,8bit 色深,CABAC/CAVLC 熵編碼 | 全瀏覽器原生支援 | | H.265/HEVC | 4K@60fps,10bit色深,壓縮效率較H.264提升50%,需專利授權 | Safari原生支援,其他瀏覽器需硬體解碼 | | Streams API | 支援Fetch API 與 ReadableStream,可處理 gzip/deflate 壓縮格式 | Chrome/Edge/Firefox/Safari全支援 | * 技術比較表 | 技術 | 延遲 | 伺服器需求 | 整合複雜度 | | -------- | -------- | -------- | -------- | | WebRTC | 低 (100-500ms) | 無(純P2P) | 高(需處理SDP/ICE) | | RTSP over WebSocket | 中 (500-1000ms) | 需轉碼代理 | 中 | | MJPEG | 高 (>1s | 無 | 低 | ## RTSP over WebSocket :::info 在Axis攝影機中整合 RTSP over WebSocket,主要方式是利用 Axis 攝影機支援的 WebSocket 協定來傳輸RTSP 串流。 Axis 部分型號攝影機(例如: 部分 ARTPEC 晶片系列)提供透過 WebSocket 封裝 RTSP 串流的功能,使得前端應用可以透過 WebSocket 連線接收影像串流,而非直接使用純 RTSP 協定,這對於穿越防火牆或瀏覽器直接播放非常有幫助。 ::: ### media-stream-library-js media-stream-library-js 是由 Axis 官方開發的 JavaScript 函式庫,主要用途是讓瀏覽器能夠直接播放來自 Axis 攝影機的 RTP 串流(例如: H.264 視訊和 AAC 音訊),而不需額外安裝外部播放器或插件。 它不是完整的播放器,不包含 UI 控制元件(如播放鍵、進度條等),而是提供低階的串流處理(pipeline),將 RTSP 透過 WebSocket 封裝的 RTP 串流,轉換成瀏覽器可用的 Media Source Extensions (MSE) 格式播放。 支援的串流格式包含 RTP 封裝的 H.264、AAC音訊,以及 JPEG 影像。 主要設計目標是支援 Axis IP Camera 串流,並依賴瀏覽器本身對編碼格式的解碼能力。 ### 運作原理 傳統RTSP限制 RTSP(Real Time Streaming Protocol)通常透過TCP或UDP埠口傳輸,瀏覽器本身不支援直接播放RTSP協定,因此無法直接在網頁中用<video>標籤播放RTSP串流。 WebSocket封裝RTSP 為解決此問題,Axis Camera的韌體支援將RTSP協定封裝在WebSocket通道中(WS或WSS),使得瀏覽器可以透過標準的WebSocket協定與攝影機雙向通訊。 WebSocket提供雙向通訊通道,允許瀏覽器發送RTSP指令(如SETUP、PLAY等)給攝影機,並接收封裝在WebSocket中的RTP封包。 這樣可以穿越防火牆及瀏覽器安全限制,並且避免傳統RTSP協定在瀏覽器中無法使用的問題。 media-stream-library-js的角色 media-stream-library-js負責在瀏覽器端: 建立WebSocket連線至攝影機的RTSP over WebSocket端點。 發送RTSP指令控制串流啟動、暫停等。 接收封裝在WebSocket中的RTP封包。 解析RTP封包,抽取H.264影像與AAC音訊資料。 利用Media Source Extensions(MSE)API將解封裝後的媒體資料餵給瀏覽器的<video>元素播放。 這個過程中,media-stream-library-js實現了從WebSocket到MSE的完整串流管線,讓瀏覽器可以無縫播放Axis Camera的實時影像。 ### 具體流程說明 1. 建立WebSocket連線 使用者端(瀏覽器)透過media-stream-library-js建立一個WebSocket連線到Axis Camera的WebSocket RTSP端點(通常是HTTPS端口443的WS/WSS服務)。 2. RTSP協定交換 在WebSocket通道中,media-stream-library-js發送RTSP命令(OPTIONS、DESCRIBE、SETUP、PLAY等)與攝影機協商串流參數。 3. 接收RTP封包 攝影機將RTP封包(封裝H.264影像或AAC音訊)透過WebSocket發送給瀏覽器。 4. 封包解析與重組 media-stream-library-js解析RTP封包,重組NAL單元(H.264影像片段),並將音訊資料同步處理。 5. 轉換為ISO-BMFF格式 將原始影像音訊資料封裝成瀏覽器可識別的ISO Base Media File Format(MP4容器格式的基礎),以便Media Source Extensions使用。 6. 餵給Media Source Extensions 透過MSE API將封裝好的媒體片段送入SourceBuffer,瀏覽器的<video>元素即可播放串流。 7. 播放與控制 使用者可透過 media-stream-library-js 提供的API控制播放、暫停、重試等行為。 ### 相關注意事項 韌體需求:WebSocket+RTSP功能需要Axis攝影機韌體版本至少6.50以上。 瀏覽器支援:播放依賴瀏覽器對H.264與AAC的原生解碼能力,且需啟用Media Source Extensions。 延遲:由於TCP與WebSocket封裝,延遲會比UDP RTP略高,適合一般監控觀看,但非超低延遲場景。 安全性:推薦使用WSS(WebSocket Secure)以保障串流安全。 CORS問題:因瀏覽器同源政策,建議串流頁面與攝影機在同一網域,或透過代理伺服器避免跨域問題。 ### 範例與資源 Axis官方GitHub的media-stream-library-js包含多個範例程式碼,如examples/browser/camera/simple-player.js,展示如何使用WebSocket與RTSP串流播放。 也有React元件Player與BasicPlayer可直接使用,方便整合到React應用中。 總結來說,media-stream-library-js透過在瀏覽器中建立WebSocket連線,實現RTSP協定的雙向通訊,接收封裝在WebSocket中的RTP封包,並利用Media Source Extensions將串流資料轉換成瀏覽器可播放格式,達成在網頁中播放Axis Camera的RTSP串流的功能。這是解決瀏覽器不支援RTSP協定的有效方案,也是Axis Camera串流整合的重要工具。 ## Resources * [Janus WebRTC Server](https://github.com/meetecho/janus-gateway) * [Janus docker-compose: A complete guide](https://www.byteplus.com/en/topic/496945?title=janus-docker-compose-a-complete-guide) * [Ant Media Server](https://github.com/ant-media/Ant-Media-Server)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up