2021年4月12日 星期一

在 Raspberry Pi 上使用 FFmpeg 直播,並透過 OpenMAX 以硬體加速編碼

在 Raspberry Pi 官網上面看到 Raspberry Pi 4 Model B 規格寫說支援 H264 (1080p60 decode, 1080p30 encode),想試試看能不能擷取 HDMI 訊號、推送 1080p30 串流作直播。


先上一下這次的執行環境資訊:

pi@raspberrypi:~ $ uname -a

Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux


pi@raspberrypi:~ $ ffmpeg -hide_banner -version 

ffmpeg version 4.1.6-1~deb10u1+rpt1 Copyright (c) 2000-2020 the FFmpeg developers

built with gcc 8 (Raspbian 8.3.0-6+rpi1)


用 FFmpeg 直播的原理大致上如下
  1. 透過 v4l2 獲得 HDMI 擷取卡的影像訊號
  2. 透過 alsa 獲得 HDMI 擷取卡的聲音訊號
  3. 將影像訊號透過 OpenMAX 以硬體加速編碼成 h264 格式
  4. 將聲音訊號編碼成 aac 格式
  5. 以 flv 作為 muxer,將影像訊號和聲音訊號包在一起,推送 rtmp 串流到 YouTube 進行直播