1

Temat: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Witam, walcze od tygodnia z routerem Dlinka DWR-118 A2 który od jakiegoś czasu jest wspierany przez openwrt.  Próbuję skompilować pod niego firmware tak by mieć możliwość rejestracji strumienia RTSP na pendrive. Jedyne co mnie ogranicza to brak kodeka h264. W make menuconfig wybieram ffmpeg oraz libffmpeg-custom, wybieram interesujące mnie kodeki i niestety ale dostaję taki błą (nawet gdy nie wybieram żadnego kodeka dla libffmpeg-custom):

Collected errors:
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavcodec.so.57
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavcodec.so.57.64.101
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavdevice.so.57
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavdevice.so.57.1.100
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavformat.so.57
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavformat.so.57.56.101
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavutil.so.55
        But that file is already provided by package  * libffmpeg-full
* check_data_file_clashes: Package libffmpeg-custom wants to install file /home/epcadmin/git_dwr118/openwrt/build_dir/target-mipsel_24kc_musl/root-ramips/usr/lib/libavutil.so.55.34.101
        But that file is already provided by package  * libffmpeg-full
* opkg_install_cmd: Cannot install package libffmpeg-custom.
package/Makefile:65: recipe for target 'package/install' failed
make[2]: *** [package/install] Error 255
make[2]: Leaving directory '/home/epcadmin/git_dwr118/openwrt'
package/Makefile:104: recipe for target '/home/epcadmin/git_dwr118/openwrt/staging_dir/target-mipsel_24kc_musl/stamp/.package_install' failed
make[1]: *** [/home/epcadmin/git_dwr118/openwrt/staging_dir/target-mipsel_24kc_musl/stamp/.package_install] Error 2
make[1]: Leaving directory '/home/epcadmin/git_dwr118/openwrt'
/home/epcadmin/git_dwr118/openwrt/include/toplevel.mk:216: polecenia dla obiektu 'world' nie powiodły się
make: *** [world] Błąd 2
epcadmin@epcstream:~/git_dwr118/openwrt$ make menuconfig
configuration written to .config

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.


Drugie pytanie to czy plik sysupgrade który po kompilacji ma 8.2MB uda mi się wrzucić do DWR-118 A2 ?  Urządzenie pokazuje wielkość root-a na 7,8MB. Jeśli nie to co zrobić by obraz był mniejszy ? 

Ostatnie pytanie, czy istnieje możliwość włączenia w konfigu kompilacji ffmpeg libx264 oraz enkoderów ?  Nie wiem co  zrobic by po kompilacji mieć w ffmpeg włączone te kodeki i funkcje.

2

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Masz za dużo wybrane - albo -full albo -custom, nie razem bo one dostarczają te same biblioteki. Sprawdź konfig i weź tylko jeden z nich.

Wywal z obrazu zbędne rzeczy.

Masz zaznaczone w konfigu CONFIG_BUILD_PATENTED=y ?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Sęk w tym że po wybraniu ffmpeg z multimediów nie da się odznaczyć libffmpeg-full, zostaje on zablokowany(-*-) i tutaj jest problem. Oto linki do Config.in oraz Makefile

https://files.fm/f/gsckqwde
https://files.fm/f/juqhbqyr

4

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

No to nie kompiluj libffmpeg-custom skoro -full ma wszystko zaznaczone.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Szczerze to nie do końca rozumiem logiki konfiguracji tych plików. Ja to zrozumiałem tak, że po zaznaczeniu pakietu w make menuconfig zostaje ona włączona np. dla ffmmpeg i tak by to wyglądało. Teraz gdy wyłaczyłem libffmpeg-custom, ffmpeg kompiluje mi się z wyłączonym libx264 oraz innymi encoderami.

6

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Niektóre pakiety mają predefiniowe opcje konfiguracyjne, w niektóry możesz coś wybrać. Ot i taka jest logika.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez Zuzia 2018-10-05 03:30:46)

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

pikwas napisał/a:

czy plik sysupgrade który po kompilacji ma 8.2MB uda mi się wrzucić do DWR-118 A2 ?  Urządzenie pokazuje wielkość root-a na 7,8MB. Jeśli nie to co zrobić by obraz był mniejszy ?

Obrazy kompilują się do maks. 16MB i takie da się wgrać.

Co do reszty to nie da się zainstalować równocześnie libffmpeg-full oraz libffmpeg-custom, dlatego przy kompilacji masz błędy.


pikwas napisał/a:

czy istnieje możliwość włączenia w konfigu kompilacji ffmpeg libx264 oraz enkoderów ?  Nie wiem co  zrobic by po kompilacji mieć w ffmpeg włączone te kodeki i funkcje.

Można skompilować z opcjami, które Cię interesują, jak jest domyślnie podejrzysz w feeds/packages/multimedia/ffmpeg/Makefile
Domyślam się, że w FFMPEG_CONFIGURE trzeba dodać --enable-libx264 a w FFMPEG_CUSTOM_ENCODER h264, czy coś w ten deseń.

8

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

W tej chwili udało mi się uruchomić zapis strumienia h264 do pliku mp4. Cała zasługa dla Zuzi, gdyż to ona przygotowała dla mnie fw z włączoną obsługą h264. Ffmmpeg działa i świetnie sobie radzi z zapisaniem strumienia lecz pod warunkiem że zapisujemy strumień h264 za pomocą protokołu http (ts over IP). Nie udaje mi się nadal zapisać strumienia RTSP, ale na chwilę obecną nie będę drążył tego tematu gdyż dla mnie wystarczające jest że mogę zapisać strumień http.

Pozostaje jeden problem gdyż chciałem uruchamiać oraz zatrzymywać ffmpeg za pomocą przycisku wps jednak jak się okazuje to hotplug "wisi" tak długo jak wykona się skrypt przez co nie da się wyłączyć zapisu poprzez ponowne naciśnięcie.

Napisałem skrypt który uruchamia ffmpeg ale niestety po drugim naciśnięci wps nie jest go w stanie uruchomić gdyż uruchomiony jest piewszy proces hotplug który blokuje ponowne wykonanie skryptu. Jest możliwość by użyć wps do załączania i wyłączania jednocześnie ?  Niżej mój skrypt.


#!/bin/sh
if pgrep -x "ffmpeg" > /dev/null; then
pkill -f ffmpeg
echo "0" > /sys/class/leds/dwr-118-a2\:green\:usb/brightness
exit 0
else
echo "255" > /sys/class/leds/dwr-118-a2\:green\:usb/brightness
ffmpeg -i http://192.168.1.227/main -acodec copy -vcodec copy -f mpegts /mnt/sda1/$(date +%d_%m_%Y"_"%H_%M_%S).mp4
echo "0" > /sys/class/leds/dwr-118-a2\:green\:usb/brightness
fi
exit 0

9

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

ffmpeg -i http://192.168.1.227/main -acodec copy -vcodec copy -f mpegts /mnt/sda1/$(date %d_%m_%Y"_"%H_%M_%S).mp4 &


Poślij to żeby wykonywało się w tle.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Wielkie dzięki, o to chodziło. Skrypt już działa jednak jest jeszcze jeden problem, na końcu chciałbym wyłączać diode w razie nieudanego uruchomienia ffmpeg lub w razie błędu niestety przez to że działa on w tle to nic ine daje polecenie wyłączające diodę  tuż za poleceniem uruchomieniowym. Dodałem do crona polecenie sprawdzające ale to nie do końca fachowo. Jest na to inny sposób ?  Jednocześnie mam prośbę o sprawdzenie składni skryptu uruchamiającego ffmpeg. mam wrażenie że czasem wyłacza ffmpeg dopiero po drugim kliknięciu wps-a, wyrzuca mi w konsoli podczas uruchomionego vi napis "Terminated" podczas zabijania procesu przyciskiem.

Skrypt:

#!/bin/sh
if pgrep -x "ffmpeg" > /dev/null 2>&1
then
pkill -f ffmpeg
echo "0" > /sys/class/leds/dwr-118-a2\:green\:usb/brightness
else
echo "255" > /sys/class/leds/dwr-118-a2\:green\:usb/brightness
ffmpeg -i http://192.168.1.227/main -acodec copy -vcodec copy -fs 10000485760 -f mp4 /mnt/sda1/$(date +%d_%m_%Y"_"%H_%M_%S).mp4 &
break
fi


polecenie do cron-a:
*/1 * * * * if pgrep -x "ffmpeg"  > /dev/null 2>&1; then wait 1; else echo "0" > /sys/class/leds/dwr-118-a2\:green\:usb/brightness; fi

11

Odp: ffmpeg+libx264+libffmpeg-full+libffmpeg-custom

Coś w rodzaju

(ffmpeg -i ... || echo "0" > /sys/class/leds/dwr-118-a2:green:usb/brightness) &

Ale to wygasi diodę tylko jeżeli ffmpeg wyszedł z błędem. Już lepiej zostaw to coś w cronie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.