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:
1 |
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:
1 2 3 |
real 2m12.845s user 6m18.236s sys 0m1.141s |
Z kolei Odroid C2 przerobił film z prędkością około 12fps (1,33x):
1 2 3 |
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:
1 |
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):
1 2 3 |
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.