mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-28 11:43:56 -06:00
update FFmpeg for Rockchip (#11351)
This commit is contained in:
parent
fbec08354c
commit
67bff1e79e
@ -113,20 +113,6 @@ if int(os.environ["LIBAVFORMAT_VERSION_MAJOR"]) < 59:
|
|||||||
"-fflags nobuffer -flags low_delay -stimeout 5000000 -user_agent go2rtc/ffmpeg -rtsp_transport tcp -i {input}"
|
"-fflags nobuffer -flags low_delay -stimeout 5000000 -user_agent go2rtc/ffmpeg -rtsp_transport tcp -i {input}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# add hardware acceleration presets for rockchip devices
|
|
||||||
# may be removed if frigate uses a go2rtc version that includes these presets
|
|
||||||
if go2rtc_config.get("ffmpeg") is None:
|
|
||||||
go2rtc_config["ffmpeg"] = {
|
|
||||||
"h264/rk": "-c:v h264_rkmpp_encoder -g 50 -bf 0",
|
|
||||||
"h265/rk": "-c:v hevc_rkmpp_encoder -g 50 -bf 0",
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
if go2rtc_config["ffmpeg"].get("h264/rk") is None:
|
|
||||||
go2rtc_config["ffmpeg"]["h264/rk"] = "-c:v h264_rkmpp_encoder -g 50 -bf 0"
|
|
||||||
|
|
||||||
if go2rtc_config["ffmpeg"].get("h265/rk") is None:
|
|
||||||
go2rtc_config["ffmpeg"]["h265/rk"] = "-c:v hevc_rkmpp_encoder -g 50 -bf 0"
|
|
||||||
|
|
||||||
for name in go2rtc_config.get("streams", {}):
|
for name in go2rtc_config.get("streams", {}):
|
||||||
stream = go2rtc_config["streams"][name]
|
stream = go2rtc_config["streams"][name]
|
||||||
|
|
||||||
|
@ -25,5 +25,5 @@ ADD https://github.com/MarcA711/rknpu2/releases/download/v1.5.2/librknnrt_rk3588
|
|||||||
|
|
||||||
RUN rm -rf /usr/lib/btbn-ffmpeg/bin/ffmpeg
|
RUN rm -rf /usr/lib/btbn-ffmpeg/bin/ffmpeg
|
||||||
RUN rm -rf /usr/lib/btbn-ffmpeg/bin/ffprobe
|
RUN rm -rf /usr/lib/btbn-ffmpeg/bin/ffprobe
|
||||||
ADD --chmod=111 https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases/download/6.1-1/ffmpeg /usr/lib/btbn-ffmpeg/bin/
|
ADD --chmod=111 https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases/download/6.1-3/ffmpeg /usr/lib/btbn-ffmpeg/bin/
|
||||||
ADD --chmod=111 https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases/download/6.1-1/ffprobe /usr/lib/btbn-ffmpeg/bin/
|
ADD --chmod=111 https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases/download/6.1-3/ffprobe /usr/lib/btbn-ffmpeg/bin/
|
||||||
|
@ -362,15 +362,43 @@ that NVDEC/NVDEC1 are in use.
|
|||||||
|
|
||||||
## Rockchip platform
|
## Rockchip platform
|
||||||
|
|
||||||
Hardware accelerated video de-/encoding is supported on all Rockchip SoCs.
|
Hardware accelerated video de-/encoding is supported on all Rockchip SoCs using [Nyanmisaka's FFmpeg Fork](https://github.com/nyanmisaka/ffmpeg-rockchip) based on [Rockchip's mpp library](https://github.com/rockchip-linux/mpp).
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Make sure that you use a linux distribution that comes with the rockchip BSP kernel 5.10 or 6.1 and supports VPU. To check, enter the following commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ uname -r
|
||||||
|
5.10.xxx-rockchip # or 6.1.xxx; the -rockchip suffix is important
|
||||||
|
$ ls /dev/dri
|
||||||
|
by-path card0 card1 renderD128 renderD129 # should list renderD128
|
||||||
|
```
|
||||||
|
|
||||||
|
I recommend [Joshua Riek's Ubuntu for Rockchip](https://github.com/Joshua-Riek/ubuntu-rockchip), if your board is supported.
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
Use a frigate docker image with `-rk` suffix and enable privileged mode by adding the `--privileged` flag to your docker run command or `privileged: true` to your `docker-compose.yml` file.
|
Follow Frigate's default installation instructions, but use a docker image with `-rk` suffix for example `ghcr.io/blakeblackshear/frigate:stable-rk`.
|
||||||
|
|
||||||
|
Next, you need to grant docker permissions to access your hardware:
|
||||||
|
- During the configuration process, you should run docker in privileged mode to avoid any errors due to insufficient permissions. To do so, add `privileged: true` to your `docker-compose.yml` file or the `--privileged` flag to your docker run command.
|
||||||
|
- After everything works, you should only grant necessary permissions to increase security. Add the lines below to your `docker-compose.yml` file or the following options to your docker run command: `--security-opt systempaths=unconfined --security-opt apparmor=unconfined --device /dev/dri:/dev/dri --device /dev/dma_heap:/dev/dma_heap --device /dev/rga:/dev/rga --device /dev/mpp_service:/dev/mpp_service`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
security_opt:
|
||||||
|
- apparmor=unconfined
|
||||||
|
- systempaths=unconfined
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
- /dev/dma_heap:/dev/dma_heap
|
||||||
|
- /dev/rga:/dev/rga
|
||||||
|
- /dev/mpp_service:/dev/mpp_service
|
||||||
|
```
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
Add one of the following ffmpeg presets to your `config.yaml` to enable hardware acceleration:
|
Add one of the following FFmpeg presets to your `config.yaml` to enable hardware video processing:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# if you try to decode a h264 encoded stream
|
# if you try to decode a h264 encoded stream
|
||||||
@ -387,29 +415,3 @@ ffmpeg:
|
|||||||
Make sure that your SoC supports hardware acceleration for your input stream. For example, if your camera streams with h265 encoding and a 4k resolution, your SoC must be able to de- and encode h265 with a 4k resolution or higher. If you are unsure whether your SoC meets the requirements, take a look at the datasheet.
|
Make sure that your SoC supports hardware acceleration for your input stream. For example, if your camera streams with h265 encoding and a 4k resolution, your SoC must be able to de- and encode h265 with a 4k resolution or higher. If you are unsure whether your SoC meets the requirements, take a look at the datasheet.
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### go2rtc presets for hardware accelerated transcoding
|
|
||||||
|
|
||||||
If your input stream is to be transcoded using hardware acceleration, there are these presets for go2rtc: `h264/rk` and `h265/rk`. You can use them this way:
|
|
||||||
|
|
||||||
```
|
|
||||||
go2rtc:
|
|
||||||
streams:
|
|
||||||
Cam_h264: ffmpeg:rtsp://username:password@192.168.1.123/av_stream/ch0#video=h264/rk
|
|
||||||
Cam_h265: ffmpeg:rtsp://username:password@192.168.1.123/av_stream/ch0#video=h265/rk
|
|
||||||
```
|
|
||||||
|
|
||||||
:::warning
|
|
||||||
|
|
||||||
The go2rtc docs may suggest the following configuration:
|
|
||||||
|
|
||||||
```
|
|
||||||
go2rtc:
|
|
||||||
streams:
|
|
||||||
Cam_h264: ffmpeg:rtsp://username:password@192.168.1.123/av_stream/ch0#video=h264#hardware=rk
|
|
||||||
Cam_h265: ffmpeg:rtsp://username:password@192.168.1.123/av_stream/ch0#video=h265#hardware=rk
|
|
||||||
```
|
|
||||||
|
|
||||||
However, this does not currently work.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
Loading…
Reference in New Issue
Block a user