Obecnie na działce do OrangePi mam podpięte dwie kamery z rozdzielczością 720p wysyłające po RTSP strumienie H.264. Z użyciem pakietów motion i motioneye jestem w stanie wyciągnąć transmisję z kamer z mocno zmiennym framerate’em, gdzie szczytowo motioneye pokazuje mi 10 i 7 FPS. Jako że wynik jest mocno niezadowalający, stwierdziłem że pora na modernizację sprzętu. Wybór padł na Odroida C2, dla odmiany z zainstalowanym DietPi.
Benchmark
Motion oparty jest o ffmpeg, dlatego zrobiłem sobie mały benchmark z dwuminutowego kawałka nagrania. Testowa komenda wygląda tak:
time ffmpeg -i nagranie.mp4 -r 8 -vf scale=640:-1 -c:v libx264 -preset medium -b:v 250k -c:a copy /tmp/output.mkv
OrangePi One dało przy tym wynik:
real 2m12.845s user 6m18.236s sys 0m1.141s
Z kolei Odroid C2 przerobił film z prędkością około 12fps (1,33x):
real 1m33.025s user 5m39.140s sys 0m1.340s
Jak widać wyniki nie powalają. Jednak okazuje się, że C2 dobrze sobie rodzi z kodowaniem do MPEG4. Wykorzystałem polecenie:
time ffmpeg -i nagranie.mp4 -r 8 -vf scale=640:-1 -c:v mpeg4 -preset medium -b:v 250k -c:a copy /tmp/output.mp4
O ile wyjściowy film H.264 ma rozmiar 39MB, przy MPEG4 jest już to trochę więcej, bo 42MB. Otrzymane czasy (26fps, 3,29x):
real 0m38.174s user 1m31.070s sys 0m0.860s
I na koniec ładny obrazek porównawczy:
Jak widać, różnica w czasach przy użyciu kompresji H.264 nie jest jakaś gigantyczna – na obu platformach popularne dystrybucje linuksa nie posiadają sprzętowych enkoderów. Jest jednak małe światło nadziei dla Odroida – rok temu powstała biblioteka c2_vpcodec, pozwalająca na kodowanie video, jednak nie współpracująca wprost z ffmpeg. Poczekamy na rozwój wydarzeń – być może z tego SBC jeszcze będzie przyzwoity rejestrator.
Aktualizacja 7.05.2019
Dzisiaj zauważyłem, że apt zaciągnął mi na domowym OrangePi nową wersję ffdshow. Stwierdziłem, że pora ponowić testy. Dla x264 otrzymałem:
real 1m41.575s user 6m22.768s sys 0m2.580s
Zaś dla testu mp4:
real 1m15.338s user 3m3.367 sys 0m1.247s
Naniosłem wyniki na wykres widoczny poniżej. Jak widać wydajność wzrosła, lecz wciąż nie dogoniła tej z Odroida. Być może wraz z upływem czasu sytuacja się jeszcze bardziej poprawi. 😉