1.Объявления.
Немного расскажу о структуре плей-листа. Суть такая. Есть две папки notice/ и videos/.В notice/ находятся объявления, которые надо часто показывать, а в videos/ - каталоги с роликами из которых случайным образом и формируется плей-лист. Таким образом структура плей-листа примерно такая:
ролик из videos/subdir1/
ролик из notice/
ролик из videos/subdir2/
ролик из notice/
Теперь появилась необходимость - обеспечить возможность указания нескольких notice в заданном порядке.
ролик из videos/subdir1/
ролик notice/notice1
ролик notice/notice2
ролик из videos/subdir2/
ролик notice/notice1
ролик notice/notice2
Я эту проблему решил так.
Ролики notices указываются в конфиге в виде массива, таким образом возможно задать последовательность их при формировании плей-листа.
notices : ['disp.mpg', 'mess.mpg'], // объявленияВ программе при формировании записи плей-листа в цикле добавляются notices
// добавление notices
for ( i = 0, len = config.notices.length; i < len; i += 1 ) {
pl += '\n' + (nStr + (i + 1)) + ',type,0';
pl +='\n' + (nStr + (i + 1)) + ',filename,' + config.gp26_notice + config.notices[i];
}Логика такая - зайти в папку videos/ пройтись по всем ее подкаталогам, из каждого случайным образом взять ролик, а при формировании записи в плей-листе для ролика добавлять записи для объявлений.
2. Размер плей-листа.
Второй вопрос, который надо было решить - размер плей-листа. Поясню. Допустим в videos/ четыре подкаталога 01_tv/, 02_miac/, 03_gp26/, 04_mult/.Плей-лист формируется раз в сутки и крутиться целый день. При такой структуре каталога плей лист получается примерно таким
Возникла задумка, ведь можно зациклить обход подкаталогов и чем больше повторов, тем больше плей-лист.MPCPLAYLIST1,type,01,filename,d:/gp26_videos/videos/01_tv/vrachi_13102011.mp42,type,02,filename,d:/gp26_videos/notice/disp.mpg3,type,03,filename,d:/gp26_videos/notice/mess.mpg4,type,04,filename,d:/gp26_videos/videos/02_miac/obraz_jizni_3.mp45,type,05,filename,d:/gp26_videos/notice/disp.mpg6,type,06,filename,d:/gp26_videos/notice/mess.mpg7,type,07,filename,d:/gp26_videos/videos/03_gp26/smotrovoi.mpg8,type,08,filename,d:/gp26_videos/notice/disp.mpg9,type,09,filename,d:/gp26_videos/notice/mess.mpg10,type,010,filename,d:/gp26_videos/videos/04_mult/Masha_i_Medved_25.avi11,type,011,filename,d:/gp26_videos/notice/disp.mpg12,type,012,filename,d:/gp26_videos/notice/mess.mpg
Количество повторов вынес в конфиг
numOfRep : 3, // кол-во повторов (сколько в цикле формировать плей-лист с дозаписью)
Реализация логики такая:
// чтобы плей-лист не был слишком коротким, можно увеличить количество повторов
for ( rep = 0; rep < config.numOfRep; rep += 1 ) {
// Обойти все подкаталаги и для каждого создать запись в плей-листе
_.each(subdirs, function (subdir, i) {
createRecord(curStrPl, subdir + '/');
curStrPl += config.numOfNotices + 1;
});
}
Пока разбирался с решением этих задач немного "причесал" код, сделал его более понятным и прозрачным. Вынес логику записи плей-листа в отдельную функцию.
/**
* Запись плей-листа на диск
*/
function recPl () {
fs.open(config.plDir + config.plName,"w",0644, function (err, file_handle) {
if ( !err ) {
fs.write(file_handle, pl, null, 'ascii', function (err, writenn) {
if (!err) {
logger.log('info', 'Playlist ' + config.plName + ' created.');
}
});
} else {
logger.log('error', 'Record playlist: Error opening file ' + config.plDir + config.plName);
}
});
}
Сам проект можно загрузить здесь.
Комментариев нет:
Отправить комментарий