Немного об IPTV или проверка m3u с помощью Python. Часть 02

У меня вопрос возник. А возможно ли узнать из самого потока название канала средствами python? И если да, то пните в какую сторону копать.
 
У меня вопрос возник. А возможно ли узнать из самого потока название канала средствами python? И если да, то пните в какую сторону копать.

Думаю, что да. Некоторые плееры пытаются это сделать. Для примера, IDv3 теги передаются в медиапотоке без видео. Вот только нужно их из потока получить. А значит, поток нужно декодировать. По крайней мере попробовать это сделать. Тем более, это ведь поток. И то, что для вас является началом вещания, для потока это может быть середина. Но, думаю, что название и прочие параметры периодически передаются. Не копал в этом направлении глубоко. Так что, вам надо попробовать понять, что ищут плееры в потоке. Какие, может быть, сигнатуры.
 
Сдается мне, что на большинстве потоков это напрасный труд. Зачем им записывать метаданные если они занимаются простым рестримом.
Python:
import asyncio
import json

URL = 'https://telecola-live.gcdn.co/cdn_origin2_ssd/matchtvhd/chunks.m3u8'

async def ffmpeg(cmd):
    proc = await asyncio.create_subprocess_shell(
        cmd,
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE)

    stdout, stderr = await proc.communicate()

    print(f'[{cmd!r} exited with {proc.returncode}]')
    if stdout:
        print(f'[stdout]\n{stdout.decode()}')
    if stderr:
        print(f'[stderr]\n{stderr.decode()}')

asyncio.run(ffmpeg(f'ffmpeg -hide_banner -user_agent "libmpv" -i {URL}'))
С помощью гугля набросал код, попробовал на некоторых потоках, везде пусто. :(
 
Сдается мне, что на большинстве потоков это напрасный труд. Зачем им записывать метаданные если они занимаются простым рестримом.
Python:
import asyncio
import json

URL = 'https://telecola-live.gcdn.co/cdn_origin2_ssd/matchtvhd/chunks.m3u8'

async def ffmpeg(cmd):
    proc = await asyncio.create_subprocess_shell(
        cmd,
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE)

    stdout, stderr = await proc.communicate()

    print(f'[{cmd!r} exited with {proc.returncode}]')
    if stdout:
        print(f'[stdout]\n{stdout.decode()}')
    if stderr:
        print(f'[stderr]\n{stderr.decode()}')

asyncio.run(ffmpeg(f'ffmpeg -hide_banner -user_agent "libmpv" -i {URL}'))
С помощью гугля набросал код, попробовал на некоторых потоках, везде пусто. :(

Ну, возможно так и есть. Я пробовал получить теги из аудиопотока, то есть из вещания интернет-радиостанции. Там можно что-то забрать. Теги передаются. То есть, при должном упорстве и копании документации, возможно что-то получить можно. А вот с видео не пробовал. Да и необходимости не было. Ну и, как вы абсолютно верно заметили, у большинства это рестрим. Думаю, что на ресиверы никто в потоке не передает названия каналов. Передается программа передач, которая уже принимается ресивером и раскидывается по каналам.
 
Здравствуйте, подскажите,как запустить скрипт в работу ? не могу что то разобраться,ну и у меня есть плей лист и там порой проскакивает статичная картинка с просьбой купить подписку,я так понимаю с помощью вашего скрипта можно отсеять такие каналы. спасибо за ответы. у меня под рукой есть и runtu & windows 10
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!