Bonjour,
J'utilise dPluzz-cli.sh avec ffmpeg sur une très vieille machine (x686) installée récemment qui me sert de serveur DLNA en Gentoo et je rencontre quelques problèmes avec la ligne d'appel de ffmpeg (J'ai besoin de ffmpeg pour serviio) :
Déjà voici la version et les options de compilation (ce sont les options gentoo par défaut) :
ffmpeg version 2.8 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.3 (Gentoo 4.9.3 p1.2, pie-0.6.3)
configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --enable-shared --cc=i686-pc-linux-gnu-gcc --cxx=i686-pc-linux-gnu-g++ --ar=i686-pc-linux-gnu-ar --optflags=' ' --disable-static --enable-avfilter --enable-avresample --disable-stripping --disable-indev=v4l2 --disable-outdev=v4l2 --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --disable-outdev=sdl --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-doc --disable-gnutls --enable-gpl --enable-hardcoded-tables --enable-iconv --disable-lzma --enable-network --disable-openssl --enable-postproc --disable-libsmbclient --disable-ffplay --disable-vaapi --disable-vdpau --disable-xlib --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --enable-zlib --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable-libcaca --disable-openal --disable-opengl --disable-libv4l2 --disable-libpulse --disable-libopencore-amrwb --disable-libopencore-amrnb --disable-libfdk-aac --disable-libopenjpeg --disable-libbluray --disable-libcelt --disable-libgme --disable-libgsm --disable-libmodplug --disable-libopus --disable-libquvi --disable-librtmp --disable-libssh --disable-libschroedinger --disable-libspeex --disable-libvorbis --disable-libvpx --disable-libzvbi --disable-libbs2b --disable-libflite --disable-frei0r --disable-libfribidi --disable-fontconfig --disable-ladspa --disable-libass --disable-libfreetype --disable-libsoxr --enable-pthreads --disable-libvo-aacenc --disable-libvo-amrwbenc --disable-libmp3lame --disable-libaacplus --disable-libfaac --disable-libsnappy --disable-libtheora --disable-libtwolame --disable-libwavpack --disable-libwebp --disable-libx264 --disable-libx265 --disable-libxvid --disable-x11grab --disable-amd3dnow --disable-amd3dnowext --disable-avx --disable-avx2 --disable-fma3 --disable-fma4 --disable-mmx --disable-mmxext --disable-sse --disable-sse2 --disable-sse3 --disable-ssse3 --disable-sse4 --disable-sse42 --disable-xop --cpu=i686
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Voilà les erreurs avec la ligne d'appel standard :
ffmpeg -y -i "http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=" -vcodec copy -acodec copy test.mkv
(... snip ...)
[http @ 0x962b870] No trailing CRLF found in HTTP header.
[h264 @ 0x962af20] non-existing SPS 0 referenced in buffering period
Last message repeated 1 times
[h264 @ 0x966ea60] non-existing SPS 0 referenced in buffering period
Input #0, hls,applehttp, from 'http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=':
Duration: 00:01:31.52, start: 0.120833, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 704x396 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 66 kb/s
[matroska @ 0x9715c40] Codec for stream 0 does not use global headers but container format requires global headers
[matroska @ 0x9715c40] Codec for stream 1 does not use global headers but container format requires global headers
[matroska @ 0x9715c40] Error parsing AAC extradata, unable to determine samplerate.
Output #0, matroska, to 'test.mkv':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 704x396 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 25 tbr, 1k tbn, 90k tbc
Stream #0:1: Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, 66 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Pour le
"No trailing CRLF found in HTTP header"
qui n'est pas bloquant et qui est apparemment un bug de la version ffmpeg j'ai trouvé un workaround : ajouter
-headers 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Apple WebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'$'\r\n'
(On pourrait aussi réutiliser UserAgent positionné pour le wget) ce qui est important c'est le '$'\r\n' à la fin ...
La ligne d'appel devient alors :
ffmpeg -headers 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Apple WebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'$'\r\n' -y -i "http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=" -vcodec copy -acodec copy test.mkv
Mais cela plante toujours :
[h264 @ 0x898a180] non-existing SPS 0 referenced in buffering period
Last message repeated 1 times
[h264 @ 0x8a71680] non-existing SPS 0 referenced in buffering period
Input #0, hls,applehttp, from 'http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=':
Duration: 00:01:31.52, start: 0.120833, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 704x396 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 66 kb/s
[matroska @ 0x8a74fe0] Codec for stream 0 does not use global headers but container format requires global headers
[matroska @ 0x8a74fe0] Codec for stream 1 does not use global headers but container format requires global headers
[matroska @ 0x8a74fe0] Error parsing AAC extradata, unable to determine samplerate.
Output #0, matroska, to 'test.mkv':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 704x396 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 25 tbr, 1k tbn, 90k tbc
Stream #0:1: Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, 66 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Apparemment c'est l'audio qui pose problème, je l'ai résolu en remplaçant "-acodec copy" par "-strict -2 -codec:a aac"
A noter qu'en supprimant simplement "-acodec copy" ffmpeg se débrouillera avec l'audio, que cela fonctionnera : chez moi il sort du ac3 ...
ffmpeg -headers 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Apple WebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'$'\r\n' -y -i "http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=" -codec:v copy -strict -2 -codec:a aac test.mkv
(-strict -2 à cause de : The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.)
il y a toujours des erreurs mais apparemment ça passe :
[h264 @ 0x99171d0] non-existing SPS 0 referenced in buffering period
Last message repeated 1 times
[h264 @ 0x995aa90] non-existing SPS 0 referenced in buffering period
Input #0, hls,applehttp, from 'http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=':
Duration: 00:01:31.52, start: 0.120833, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 704x396 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 66 kb/s
[matroska @ 0x9a02210] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, matroska, to 'test.mkv':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 704x396 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 25 tbr, 1k tbn, 90k tbc
Stream #0:1: Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc56.60.100 aac
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 2288 fps=141 q=-1.0 Lsize= 10078kB time=00:01:31.46 bitrate= 902.7kbits/s
video:8591kB audio:1433kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.537898%
edit:
Bon, j'ai supprimé aussi l'erreur :
[matroska @ 0x9a02210] Codec for stream 0 does not use global headers but container format requires global headers
en rajoutant "-flags +global_header" ce qui donne :
ffmpeg -headers 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) Apple WebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'$'\r\n' -y -i "http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=" -codec:v copy -strict -2 -codec:a aac -flags +global_header test.mkv
(... snip ...)
[h264 @ 0x86bb140] non-existing SPS 0 referenced in buffering period
Last message repeated 1 times
[h264 @ 0x86feb60] non-existing SPS 0 referenced in buffering period
Input #0, hls,applehttp, from 'http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2015/S43/J3/129697472-56278ac1d34d2-,standard1,standard2,standard3,standard4,.mp4.csmil/index_3_av.m3u8?null=':
Duration: 00:01:31.52, start: 0.120833, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 704x396 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 66 kb/s
Output #0, matroska, to 'test.mkv':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 704x396 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 25 tbr, 1k tbn, 90k tbc
Stream #0:1: Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc56.60.100 aac
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 2288 fps=144 q=-1.0 Lsize= 10078kB time=00:01:31.46 bitrate= 902.7kbits/s
video:8591kB audio:1433kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.537898%
Me reste plus qu'à trouver pour "non-existing SPS 0 referenced in buffering period"
Je continue à chercher mais si quelqu'un a une meilleure solution, je suis preneur, sinon si ça peut en débloquer certains.
Je vais certainement modifier (déjà ne serait-ce que parce que je préfère cURL) et intégrer ce script dans une crontab, pour récupérer certaines émissions et m'en inspirer pour d'autres sites.
J'aimerais aussi récupérer les textes de la page pour faire un .nfo (j'ai pas X sur mon serveur et pas envie de tout ouvrir pour savoir ce que c'est).
J'ai aussi fait des trucs avec du mpeg-ts chunked (suffit de trouver le m3u ^^) et du mp4 sur des serveurs de streaming obscurs et j'arrive à faire ce que je veux avec Arte +7 ou cinéma ...
Youtube j'ai plus de mal, rutube ou les autres chaînes de tv pas encore essayé ...
Merci aux dev. pour le bon boulot de reverse enginering ...
@+