2026年4月23日 星期四

樹莓派 透過RTSP 同時傳送影像和聲音

MediaMTX

MediaMTX 是一個開箱即用且零依賴的即時媒體伺服器和媒體代理,可讀取、發布、代理、記錄和播放視訊和音訊串流。它被設計為一個「媒體路由器」,可將媒體串流從一端路由到另一端。

目前支援:
RTSP(Port 請參見服務的「網路」分頁)
RTMP(Port 請參見服務的「網路」分頁)
LL-HLS(綁定域名)

將 MediaMTX 變成系統服務

建立服務檔案:

sudo nano /etc/systemd/system/mediamtx.service


[Unit]

Description=MediaMTX Realtime Stream Server

After=network.target

 

[Service]

ExecStart=/home/pi/mediamtx/mediamtx

WorkingDirectory=/home/pi/mediamtx

Restart=always

User=pi

 

[Install]

WantedBy=multi-user.target


啟用並執行

執行以下指令讓設定生效:


sudo systemctl daemon-reload

sudo systemctl enable mediamtx

sudo systemctl start mediamtx


再利用由 FFmpeg 同時處理 stdin (影像) 和 alsa (聲音)

def start_stream():
    global stream_process

    if stream_process is not None:
        return "already running"
    # sudo fuser -k /dev/gpiochip0
    # pkill -f search_bot.py
    command = [
        'ffmpeg',
        '-f', 'v4l2',
        '-i', '/dev/video0',
        '-f', 'alsa',
        '-i', 'default',
        '-c:v', 'libx264',
        '-af', 'volume=1.5',
        '-preset', 'ultrafast',
        '-tune', 'zerolatency',
        '-c:a', 'libopus',
        '-b:a', '128k',
        '-ar', '48000',
        '-f', 'rtsp',
        '-rtsp_transport', 'tcp',
        'rtsp://127.0.0.1:8554/cam'
    ]

    #stream_process = subprocess.Popen(command)
    stream_process = subprocess.Popen(
        command,
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL
    )
    return "started"

利用VLC RTSP function


沒有留言:

張貼留言