Бесшовный плейлист vlc в сеть

Разные проблемы звука, видео, обсуждение разных устройств и т.д.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Бесшовный плейлист vlc в сеть

Сообщение denel »

Кто нибудь знает как добиться бесшовного переключения между треками плейлиста в vlc при вещании в сеть по http? У меня при смене трека mplayer закрывается так как предыдущий трек закончился
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

https://wiki.videolan.org/Documentation:Str.../#Miscellaneous
Опция --sout-keep должна делать именно это. Но не знаю, работает ли она с HTTP. Должна по идее.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

попробовал. Но всё чего добился - теперь нет чёткого обрыва канала. Теперь начинается не стабильность потока как бы при смене треков, что так или иначе приводит к отключению mplayer. Может чем другим победить? Чтобы был стабильный поток 25 кадров/сек?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

А, Вы видео по HTTP пытаетесь вещать? Забейте, бестолковое это дело. Смотрите в сторону других протоколов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Бесшовный плейлист vlc в сеть

Сообщение MrClon »

Подозреваю что п\без перекодирования на лету (или какой-то предварительной подготовки видео, или смены плеера) проблему исправить не получится. Когда кончается один файл и начинается другой, кончается и видеопоток, если плеер прекращает воспроизведение увидев что видеопоток закончился то что тут сделаешь не объединяя файлы в один поток (т.е. перекодируя).
Может-быть если исходные файлы предварительно перегнать в какой-то пригодный для стриминга вид то проблема решится, но не факт.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

MrClon писал(а):
06.06.2014 14:25
Может-быть если исходные файлы предварительно перегнать в какой-то пригодный для стриминга вид то проблема решится, но не факт.

Не решится. Я по этим граблям прошёлся с год назад.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

Bizdelnick писал(а):
06.06.2014 14:29
MrClon писал(а):
06.06.2014 14:25
Может-быть если исходные файлы предварительно перегнать в какой-то пригодный для стриминга вид то проблема решится, но не факт.

Не решится. Я по этим граблям прошёлся с год назад.

А решений не нашли? :)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

Решений нашли. В зависимости от задач - либо RTSP, либо RTMP и HLS через nginx-rtmp-module. Но Вы-то задачу не обрисовали.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

мне нужно реализовать бесшовный поток. Нет видео на udp://@192.168.0.1:1234 или на http://192.168.0.2:8080 - тогда резервное видеоиз локального файла до тех пор пока не появится источник, при том что клиенту не подаётся никаких намёков о каких то переключениях наверху, всё должно идти бесшовно и даже там где нет вообще ничего - поток должен быть 25 кадров в секунду хотябы чёрного экрана. Это нужно для передачи IPTV приставке, которая при спотыкании о входной поток приходит в режим "ошибка чтения потока" и ждёт когда с помощью пульта ДУ воспроизведение перезапустят, вот именно этого нужно избежать этим бесшовным видео потоком.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

denel писал(а):
11.06.2014 18:09
Это нужно для передачи IPTV приставке

С этого надо было начинать. Если клиент только один - возможно, и с HTTP не совсем дохлый вариант, хотя всяко не лучший. А UDP пробовали?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

Bizdelnick писал(а):
11.06.2014 19:48
denel писал(а):
11.06.2014 18:09
Это нужно для передачи IPTV приставке

С этого надо было начинать. Если клиент только один - возможно, и с HTTP не совсем дохлый вариант, хотя всяко не лучший. А UDP пробовали?

В принципе пункт назначения IPTV приставка, до туда пробовал пока только UDP. Вот думаю может реально дать ей непрерывный поток видео?...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

denel писал(а):
12.06.2014 17:04
Вот думаю может реально дать ей непрерывный поток видео?...

Реально, реально. Естественно, с перекодированием и с --sout-keep.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

Попробовал с перекодированием выгонять на http, не вышло, обрывает. Да даже на udp, максимум что даст - "подвешивание" канала с последующим продолжением, а нужно без этого.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

Какое ещё подвешивание? Откуда?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

Bizdelnick писал(а):
13.06.2014 23:45
Какое ещё подвешивание? Откуда?

Каким образом Вам доказать своё или Ваше? (То что видео поток данных действительно останавливается на время отсутствия входящего)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Бесшовный плейлист vlc в сеть

Сообщение Bizdelnick »

Похоже, я кое-что подзабыл. Помимо --sout-keep надо использовать модуль gather. Цепочка должна быть примерно как во втором примере: #transcode{...}:gather:std{access=udp,dst=address:port}
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

Всё это почему то не даёт нужного результата.
Начал экспериментировать с astra на lua, но получается только либо ретранслировать http в udp

Код: Выделить всё

host = "192.168.0.203"
port = 8085
dst = nil

http_request({
    host = host,
    port = port,
    path = "/",
    stream = "true",
    instance = "instance",
    headers = {
        "User-Agent: Astra " .. astra.version,
        "Host: " .. host .. ":" .. port,
        "Connection: close",
    },
    callback = function(request, response)
            if response == nil then
                astra.exit()
            elseif response.code == 200 then
                dst = udp_output({
                    upstream = request:stream(),
                    addr = "127.0.0.1",
                    port = 1234
                })
            else
                log.error("[example #2] " .. response.code .. ": " .. response.message)
                astra.exit()
            end
        end
})
либо транслировать чисто плейлист файлов. Некий такой гибрид у меня чето никак не получается:

Код: Выделить всё

#!/usr/bin/env astra

outaddr = "127.0.0.1"
outport = 1234

host = "192.168.0.203"
port = "8085"
input = nil
dst = nil

log.set({ debug = true, stdout = true, filename = "/var/log/astra/astra_infokanal.log" })
pidfile("/var/run/astra_infokanal.pid")
log.info("Starting Astra ")
playlist = {
  "/home/gcp.ts",
  "http"
}
instance = { item = 0, input = nil, output = nil, }

function output()
  log.info("output")
  if playlist[instance.item] == "http" then
    http_request({
      host = host,
      port = port,
      loop = false,
      path = "/",
      stream = true,
      instance = instance,
      headers = {
        "User-Agent: Astra " .. astra.version,
        "Host: " .. host .. ":" .. port,
        "Connection: close",
      },
     callback = function(input, response)
        dst = udp_output({
          upstream = input:stream(),
          addr = outaddr,
          port = outport
        })
callback = play_next_item
    })
--  end
  else
    instance.output = udp_output({
      upstream = instance.input:stream(),
--      upstream = input:stream(),
      addr = outaddr,
      port = outport
    })
  end
end

function play_next_item()
  log.info("function play_next_item")
  if instance.item == #playlist then
    instance.item = 1
  else
    instance.item = instance.item + 1
  end
--  if instance.input then instance.input = nil end
  if instance.output then instance.output = nil end
  log.info("garbage collector")
  collectgarbage()

  if playlist[instance.item] == "/home/gcp.ts" then
    log.info("input file")
    instance.input = file_input({
      filename = playlist[instance.item],
      loop = false,
      callback = play_next_item
    })
  elseif playlist[instance.item] == "udp" then
    log.info("input stream udp")
    instance.input = udp_input({
      addr = "192.168.0.1",
      port = "1234",
      loop = false,
      callback = play_next_item
    })
  elseif playlist[instance.item] == "http" then
    log.info("input stream http")
--    callback = play_next_item
  end
  output()

  log.info("instance.item " .. instance.item)
  log.info("instance.input.data " .. playlist[instance.item])
end

play_next_item()
убираю

Код: Выделить всё

callback = function(input, response)
        dst = udp_output({
          upstream = input:stream(),
          addr = outaddr,
          port = outport
        })
- начинает работать выводя чисто файл, а если не убрать - синтаксическая ошибка
Спасибо сказали:
Аватара пользователя
denel
Сообщения: 497
ОС: Gentoo Linux
Контактная информация:

Re: Бесшовный плейлист vlc в сеть

Сообщение denel »

Что то так и не пришёл к решению, начал копать с "коммутациями"... VLC можно заставить переключаться на следующий источник плейлиста, если текущий источник стал недоступен в течение например 0,5 сек? что UDP что HTTP входной поток после отключения хоста от сети (не закрытие проги-источника) - VLC стоит и "мудро" дожидается появления связи, но мне то нужно чтоб он отказался от этой затеи по истечение полсекунды :)
Спасибо сказали:
Ответить