架設串流伺服器 – Red5 篇

想要架設子我的串流伺服器,老牌且深受企業喜愛的 Red5 肯定是個選擇。同時具備 Live 與 VoD 之串流更是讓其打趴一眾競爭者。而這也將是我們實作中所主要依賴的工具。在接下來的討論中,我們將探討如何快速架設這個系統,以及潛在的問題解決方案。

素材取用

docker-compose.yaml
BAT (Batchfile)
version: '3.8'

services:
  red5:
    image: bbc_red5-2.0.9
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: red5-server
    ports:
      - "5080:5080"  # HTTP
      - "1935:1935"  # RTMP
      - "9253:8443"  # HTTPS
    volumes:
      - ./media:/opt/red5-server/webapps/vod/streams:rw
    restart: unless-stopped
dockerfile
BAT (Batchfile)
FROM debian:sid-20250224

# Install Pre-Requisite Packages
# 
RUN apt-get update
# 
RUN apt-get install -y \
    openjdk-21-jdk \
    wget \
    unzip \
    nano

ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64

WORKDIR /opt

# Install Red5 by ZIP Realease
RUN wget https://github.com/Red5/red5-server/releases/download/v2.0.9/red5-server-2.0.9.zip && unzip red5-server-2.0.9.zip && rm red5-server-2.0.9.zip

WORKDIR /opt/red5-server

EXPOSE 5080 1935 8443

# Launch on start-up
CMD ["/bin/bash", "-c", "./red5.sh"]

實作過程

架設容器

為求穩定與獨立性,筆者決定將容器與資料架設在 C:\Red5 最簡易的位置之中。接著採用素材區所提供的兩份檔案,建立於路徑之中,並使用下列指令架設。這邊麻煩幫我檢查是否有空出 5080 1935 9253 三個端口,或者自行修改 docker-compose,yaml 之端口內容。

docker compose up -d

由於需要下載封包與資料解壓,首次執行需要略長的時間。完成之後我們會有台叫做 red5-server 的機台,以及名為 bbc_red5-2.0.9 的映像檔,總計佔約略 1.6 GB 之系統資源。

此時預設在 localhost:5080 將會有依賴 Tomcat 的網頁伺服器,當你看到下方的頁面即代表啟動成功。這邊各位不用在意上方的 DEMO,因為其原仰賴的 Adobe Flash 已經停止服務。

資料同步

後續為求使用 VoD 之功能,我們在建立容器時便同步綁定 /media 目錄。後續將會與本機中的 C:\Red5\media 的路徑做同步,後續我們處理過的隨選影片便能從這邊上架到伺服器,也不用過度擔心誤刪容器導致資料遺失的問題。

CORS

而另外如果要讓別的端站可以讀取資料,還需要額外開通 CORS 之設定。這邊我們僅示範關於 VoD 頁面之設定,而其他分頁有需要的話也能使用相同手法開通。

/opt/red5-server/webapps/vod/WEB-INF/web.xml
<web-app>
    <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
            <param-name>cors.allowed.origins</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.methods</param-name>
            <param-value>GET,POST,HEAD,OPTIONS</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

後話

各位如果前往其 GitHub 會發現它已經非常老舊,而基本上官方提供的文件也已無實際使用價值和參考意義,教學文章時常建議讓你轉往付費的 Red5 Pro 服務。雖然實作下來,各位可能認為架設這個服務非常輕鬆簡單。然而,這份腳本是筆者經過漫長且痛苦的檢查後才完成的成果,期間經歷對數個 JDK 版本的反覆測試和偵錯,甚至最終不得不放棄使用 Red5-Server-Core 最新的版本,才妥協並順利解決執行議題。

但這也是少數同時具備 Live 與 VoD 兩者服務的開源串流伺服器,為使用者節省了需要分別管理多個系統的麻煩。正是因為這種獨特的雙重功能性,以及開源專案所帶來的靈活性與可擴展性,即使面臨諸多技術挑戰和文檔不足的困境,這樣的情境之下,也算是不得不持續研究並投入時間的原因。

參考

[1] How to Set Up a Free RTMP Server with Open Source Red5 — Red5
https://www.red5.net/blog/online-rtmp-server-free/

[2] How to Enable CORS — Red5
https://www.red5.net/faqs/how-to-enable-cross-origin-resource-sharing-cors/

額外讀物

[1] Red5 Open Source — Red5
https://www.red5.net/open-source-live-streaming/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料