LINUX.ORG.RU

ffmpeg. Multi-band'овый лист.

 


0

1

Как заставить ffmpeg не читать весь мультибандовый лист master.m3u8, а только заказанный банд? Уходит много времени 10÷20сек, в зависимости от объёма листа. Или, как правильно заказать нужный банд, чтобы остальное не читал?


В master.m3u8 содержатся ссылки на m3u8 с разным качеством. Вот возьми из него нужный и передавай его сразу ffmpeg'у. Я так всегда делал.

Содержимое master.m3u8 обычно типа такого:

#EXT-X-STREAM-INF:PROGRAM-ID=1664851997,BANDWIDTH=2400000
http://cdn2.1internet.tv/hls-live/livepkgr/_definst_/1tv/1tv3.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1664851997,BANDWIDTH=950000
http://cdn2.1internet.tv/hls-live/livepkgr/_definst_/1tv/1tv2.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1664851997,BANDWIDTH=350000
http://cdn2.1internet.tv/hls-live/livepkgr/_definst_/1tv/1tv1.m3u8

Тут три m3u8 на потоки с разным битрейтом и разрешением, а внутри этих m3u8 уже непосредственно чанки с видео в формате ts. Вот один из этих m3u8 и открывай ffmpeg'oм вместо master.m3u8

Deleted
()
Ответ на: комментарий от Deleted

Если я уж сюда написал, то эту простейшую операцию как распаковать master.m3u8 я проделывал многократно. Ты видать не знаешь... Некоторые мультибандовые листы тв потоков имеют разные банды, если распаковать. У одних просто обозначены битрейтные индексы, эти можно использовать, выдернув нужный(максимальный битрейт) они стабильны, а у других имеется код. Если такой банд забрать, он будет работать, но временно. Одни 2дня, другие 4-5 дней, некоторые могут месяц, затем код сменится и тв канал перестанет работать. Что опять распаковывать? Дурное занятие! С кодовыми бандами нужен только master.m3u8, он всегда будет работать, но будет читать весь лист и тратить на это много времени.

xradio
() автор топика
Ответ на: комментарий от xradio

а у других имеется код. Если такой банд забрать, он будет работать, но временно. Одни 2дня, другие 4-5 дней, некоторые могут месяц, затем код сменится и тв канал перестанет работать.

А какой нибудь идентификатор у них есть, который не меняется? Можно было бы завернуть в скрипт, который сперва парсит master.m3u8 (грепом хотя бы), берёт нужный тебе банд и передаёт ffmpeg`у.

Привёл бы пример как выглядит адрес банда и предшествующая ему строка мета информации #EXT...

Deleted
()
Ответ на: комментарий от Deleted

Вот один из (http опущу, чтобы не рвал ссылку) svt1-a.akamaized.net/se/svt1/498dea9f-36d0-429d-b90e-e8249f952151/hls-v6/v6.m3u8 v6 и есть идентификатор, соответственно есть: v5, v4, v3, v2, v1. v6 - максимальный битрейт.

xradio
() автор топика
Ответ на: комментарий от xradio

Не, а перед ссылкой в master.m3u8 ничего не идёт, начинающееся на #EXT?
Типа такого:

#EXT-X-STREAM-INF:BLAH-BLAH...
http://svt1-a.akamaized.net/se/svt1/498dea9f-36d0-429d-b90e-e8249f952151/hls-v6/v6.m3u8

Если в master.m3u8 v6 встречеатся один раз, то можно просто

#!/bin/sh
MASTER='http://.../master.m3u8'
## или MASTER="$1" если скрипт предполагается универсальным под разные стримы

BAND="$(wget -q -O - "$MASTER" | grep 'hls-v6')"

exec ffmpeg -i "$BAND" -другие -опции

Если v6 встречается не один раз, то надо смотреть что идёт в метаинформации в предыдущей строке, как я сказал выше, возможно там есть что-то уникальное.

Deleted
()
Ответ на: комментарий от Deleted

Не не, я с теминалом не работаю! У меня ffmpeg отдельная прога со своей libffmpeg.so. У меня тв каналов много, и для каждого что-то писать куда-то? Нет, не в коня корм! Нужно из одной ком.строки ffmpeg'а. Всё должно быть 'отвратительно' удобно! Цена вопроса: 1. сейчас master.m3u8 10-20 и более секунд до открытия изображения канала. 2. Если не читать весь master.m3u8, то 3-4 секунды!

xradio
() автор топика
Ответ на: комментарий от xradio

У меня тв каналов много, и для каждого что-то писать куда-то? Нет, не в коня корм! Нужно из одной ком.строки ffmpeg'а. Всё должно быть 'отвратительно' удобно!

Не нужно ничего каждый раз писать, заранее создаёшь скрипты Первый_канал.sh, НТВ.sh, RenTV.sh и т.д. и просто запускаешь их когда надо, хоть кликом из файлового менеджера или из меню программ, если их туда прописать, хоть из ярлыков на рабочем столе.

Deleted
()
Ответ на: комментарий от Deleted

Да в том то и дело, у меня сегодня такие каналы, завтра найду другой и т.д. Достаю забугорные, они как правило геоблокированы, достать их бывает сложно. Да и не умею я писать скрипты, приложной надобности нет! Надобность была - пришлось вникнуть в ffmpeg. Я им не только недоступные каналы смотрю...

xradio
() автор топика
Ответ на: комментарий от xradio

Да в том то и дело, у меня сегодня такие каналы, завтра найду другой и т.д. Достаю забугорные, они как правило геоблокированы, достать их бывает сложно.

К чему это сказано? Не вижу в написанном ничего противоречащего сказанному мной выше.

Да и не умею я писать скрипты, приложной надобности нет!

Ну теперь вот есть :D

Ну пример я привёл, можешь просто скопипастить и подставить свою информцию. Пример как получать стрим на основании инфы из метаинформации из master.m3u8:

#!/bin/sh
MASTER='http://.../master.m3u8'
## или MASTER="$1" если скрипт предполагается универсальным под разные стримы

BANDID='STREAM-V6' # просто пример, надо смотреть что там реально прописано
## или BANDID="$2" если нужно получать из командной строки

BAND="$(wget -q -O - "$MASTER" | grep -A 1 "^#EXT.\+$BANDID" | tail -n 1)"


exec ffmpeg -i "$BAND" -другие -опции
Deleted
()
Ответ на: комментарий от Deleted

Вот фрагмент меты Program 6     Metadata:       variant_bitrate : 2892000     Stream #0:0(sv-tal): Audio: aac (LC), 48000 Hz, stereo, fltp, 90 kb/s     Metadata:       variant_bitrate : 2892000       comment         : Uppläst text     Stream #0:13: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc     Metadata:       variant_bitrate : 2892000     Stream #0:14(sv): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp (default)     Metadata:       variant_bitrate : 2892000       comment         : Originalljud

xradio
() автор топика
Ответ на: комментарий от xradio

facepalm.jpg

Зачем ты это написал? Ты содержимое master.m3u8 покажи, больше знать ничего не нужно. Выхлоп ffprobe не нужен.

Код, содержимое файлов и выхлопы консоли нужно вставлять в теги [code][/code].

Deleted
()
Ответ на: комментарий от Deleted

Я давал фрагмент. Вот два из master'а [hls,applehttp @ 0x55aeeb4c60] Playlist: 5, bandwidth: 1776000 [hls,applehttp @ 0x55aeeb4c60] svt1-a.akamaized.net/se/svt1/dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v4/v4.m3u8 [hls,applehttp @ 0x55aeeb4c60] Playlist: 6, bandwidth: 2892000 [hls,applehttp @ 0x55aeeb4c60] svt1-a.akamaized.net/se/svt1/dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v5/v5.m3u8

xradio
() автор топика
Ответ на: комментарий от xradio

ОМГ...

Это - выхлоп ffmpeg при воспроизведении. Он не интересует. Ты покажи содержимое master.m3u8

Просто скачай этот чёртов файл и покажи содержимое или его часть. Конкретно интересует две строки: адрес конкретного банда .m3u8 и предшуствующая ему строка с метаинформацией, начинающаяся на #EXT.

Я же показал как примерно выглядит master.m3u8 на примере другого аналогичного файла. Блииин...

Deleted
()
Ответ на: комментарий от Deleted

Это блин и есть плейлист master,а! Я его получаю через -report. Никаких #EXT в нём нет, не путай с нашими листами!

xradio
() автор топика
Ответ на: комментарий от xradio

Это блин и есть плейлист master,а! Я его получаю через -report. Никаких #EXT в нём нет, не путай с нашими листами!

Это никакой не плейлист, это тупо выхлоп stderr ffmpeg'а.

 -report
           Dump full command line and console output to a file

Я всё. Я больше не могу.

Deleted
()
Ответ на: комментарий от Deleted

Не надо твердить одно и то же - выхлоп, выхлоп. Ссылка есть, открой и посмотри, делов то на пару секунд!

xradio
() автор топика
Ответ на: комментарий от xradio

Ссылка есть, открой и посмотри, делов то на пару секунд!

1) Ссылка http://svt1-a.akamaized.net/se/svt1/498dea9f-36d0-429d-b90e-e8249f952151/hls-v6/v6.m3u8 не является master.m3u8
2) Она выдаёт 403 forbidden.

Deleted
()
Ответ на: комментарий от xradio

Мне не охота. Если тебе лень скопировать оттуда пару строк, то мне тем более нафиг не надо. Как бы я поступил в твоём случае я достаточно подробно рассказал, с примерами скриптов. Дальше сам разбирайся.

Deleted
()
Ответ на: комментарий от xradio

Неохотота, потому что понял - нет там #EXT!

Ты наврал. Вот содержимое твоего master.m3u8, я его получил через указанный тобой прокси:

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:LANGUAGE="sv",AUTOSELECT=YES,TYPE=AUDIO,GROUP-ID="audio",DEFAULT=YES,NAME="Originalljud"
#EXT-X-MEDIA:LANGUAGE="sv-tal",AUTOSELECT=YES,TYPE=AUDIO,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-a0/a0.m3u8",GROUP-ID="audio",DEFAULT=NO,NAME="Uppläst text"
#EXT-X-STREAM-INF:CODECS="avc1.42c016,mp4a.40.2",RESOLUTION=512x288,BANDWIDTH=732000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v3/v3.m3u8
#EXT-X-STREAM-INF:CODECS="avc1.42c015,mp4a.40.2",RESOLUTION=512x288,BANDWIDTH=240000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v0/v0.m3u8
#EXT-X-STREAM-INF:CODECS="avc1.42c016,mp4a.40.2",RESOLUTION=512x288,BANDWIDTH=444000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v1/v1.m3u8
#EXT-X-STREAM-INF:CODECS="avc1.42c016,mp4a.40.2",RESOLUTION=512x288,BANDWIDTH=552000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v2/v2.m3u8
#EXT-X-STREAM-INF:CODECS="avc1.4d401e,mp4a.40.2",RESOLUTION=768x432,BANDWIDTH=1084000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v4/v4.m3u8
#EXT-X-STREAM-INF:CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1280x720,BANDWIDTH=1776000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v5/v5.m3u8
#EXT-X-STREAM-INF:CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1280x720,BANDWIDTH=2892000,AUDIO="audio"
dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v6/v6.m3u8
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.42c015",RESOLUTION=512x288,BANDWIDTH=14400,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v0/v0-i.m3u8"
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.42c016",RESOLUTION=512x288,BANDWIDTH=34800,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v1/v1-i.m3u8"
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.42c016",RESOLUTION=512x288,BANDWIDTH=45600,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v2/v2-i.m3u8"
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.42c016",RESOLUTION=512x288,BANDWIDTH=63600,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v3/v3-i.m3u8"
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.4d401e",RESOLUTION=768x432,BANDWIDTH=98800,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v4/v4-i.m3u8"
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.4d401f",RESOLUTION=1280x720,BANDWIDTH=168000,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v5/v5-i.m3u8"
#EXT-X-I-FRAME-STREAM-INF:CODECS="avc1.4d401f",RESOLUTION=1280x720,BANDWIDTH=279600,URI="dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v6/v6-i.m3u8"

Deleted
()
Ответ на: комментарий от Deleted

Ну и чем моя: [hls,applehttp @ 0x55aeeb4c60] Playlist: 6, bandwidth: 2892000 [hls,applehttp @ 0x55aeeb4c60] svt1-a.akamaized.net/se/svt1/dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v5/v5.m3u8 отличается от твоей?: #EXT-X-I-FRAME-STREAM-INF:CODECS=«avc1.4d401f»,RESOLUTION=1280x720,BANDWIDTH=168000,URI=«dacaf7bc-6a87-4a1a-bfd9-398df9b6432c/hls-v5/v5-i.m3u8» Те же ссылки!

xradio
() автор топика

Ох, вы посмотрите какой ушлёпок выше, вместо благодарностей за то что на него потратили время он шлангует.

anonymous
()
Ответ на: комментарий от xradio

Те же ссылки!

Я у тебя не просил ссылок. Русский язык не родной что ли?

Deleted
()

Никак.

HLS source with multiple variants is not optimally handled

Демуксер ffmpeg мультибандовый источник представляет как многопрограммный и вычитывает метадату всех потоков.

Выбрать программу по индексу "-map 0:p:6" или по банду: "-map 0:m:variant_bitrate:2892000". Но это не решит твою задачу.

fopen ★★
()
Ответ на: комментарий от xradio

Был бы результат, были бы и благодарности и тити-мити.

В цивилизованном обществе обычно общаются так: «спасибо за подсказку, но ваш совет не помог и т.д.» А ты просто деревенская невежа.

anonymous
()
Ответ на: комментарий от fopen

Я так и делаю. Для master'а пишу так: -map v6 -map a:7 вот такая ахинея. Только так он открывет с макимальным битрейтом. Если v6 a6 то падает скорость, похоже он начинает цеплять ещё поток. Все, а их у меня порядка 40, master'а открывет правильно, без дополнительной писанины, только на этом шведском канале взбрыкивает, точнее на всех четырёх шведских каналах, не дочитывает последний банд, он в логе это и выдаёт, последний с индексом v5, а нужен с v6, а его то он и не читает. Странно, браузер лист правильно читает. Ерунда получается. Так произошло, когда, не так давно, шведы переиначили адреса, раньше проблемы не было. *А насчёт слишком большого времени открытия master'а спорить не буду, могу только предполагать, поэтому сюда и написал. Мой резон - если по-умолчанию ему предписано читать весь лист, то почему нельзя это отменить и вписать свою задачу. По-умолчанию много чего стоит, что автоматически отменяется вписанием другого аргумента и, или с другим значением.

xradio
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.