Некоторые телеканалы вещаются только в ночное время, но смотреть их хочется круглосуточно. Проблему можно решить следующим конфигом для Astra 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #!/usr/bin/env astra-4.0 require("stream") pidfile("/var/run/astra.pid") current_channel = nil current_state = 0 function write_channel() if current_channel then kill_channel(current_channel) end os.remove("/home/recorder/file.ts"); current_state = 1 current_channel = make_channel({ name = "Write", input = { "udp://239.100.100.1:1234" }, output = { "udp://239.200.200.1:1234/", "file:///home/recorder/file.ts" }, }) end function read_channel() if current_channel then kill_channel(current_channel) end current_state = 2 current_channel = make_channel({ name = "Read", input = { "file:///home/recorder/file.ts#loop" }, output = { "udp://239.200.200.1:1234/" }, }) end function check_time() current_time = tonumber(os.date("%H%M")) if current_state == 1 then if current_time == 1030 then read_channel() end elseif current_state == 2 then if current_time == 430 then write_channel() end end end function main() current_time = tonumber(os.date("%H%M")) read_channel(); timer({ interval = 60, callback = check_time }) end main(), |
В функциях write_channel() и read_channel() необходимо указать свои параметры входящих и исходящих потоков. В функции check_time() задаются временные рамки, в данном конфиге запись начинается в 4:30 и заканчивается в 10:30.
Конфиг не идеален, есть несколько моментов которые хочется улучшить. Во-первых, в текущей реализации нет возобновления записи в случае перезапуска процесса — запись стартует строго в указанное время, если запустить Астру позже — начнется воспроизведение. Во-вторых, нет сохранения позиции воспроизводимого файла — при перезапуске вещание файла начнется с самого начала. Астра умеет сохранять позицию и возобновлять вещание с сохранённой точки, но при тестировании оно мне чем-то не понравилось и не стал использовать эту функцию. В-третьих, хочется начинать и заканчивать запись не по времени, а по битрейту канала.