Помощь в создании подкастов

Интернет-телевидение, интернет-радио, подкасты, IPTV
Eugene
Posts: 2804
Joined: Tue Sep 16, 2008 7:30 pm

Re: Помощь в создании подкастов

Post by Eugene »

slawa321 wrote:
Eugene wrote:Возможно будет полезно: в ссылке на медиа-ресурс могут быть параметры

Code: Select all

?transcoding=1&timestart=количество_секунд
Т.е. плейлист можно сформировать скриптом.
Я чего то недопонимаю :
Добавил в скрипте получения ссылки
MediaResourceLink := video+'?transcoding=1&timestart=500';
Фильм с vk.com все равно запустился сначало ,а как надо?
Речь о web-интерфейсе и ссылке HMS-сервера.
VVS1234
Posts: 44
Joined: Sat Oct 13, 2012 10:41 pm

Re: Помощь в создании подкастов

Post by VVS1234 »

Eugene wrote:Возможно будет полезно: в ссылке на медиа-ресурс могут быть параметры

Code: Select all

?transcoding=1&timestart=количество_секунд
Т.е. плейлист можно сформировать скриптом.
Конечно, было бы полезно... Но, увы, нужны объяснения.

1) Правильно сформированная ссылка должна выглядеть так:
192.168.0.19:45397/MediaServer/VideoItems/765c8fb80fc4ba87b04060b79e7b1011.mpg?transcoding=1&timestart=600
?
2)эти параметры обрабатываются автоматом или их надо перехватывать веб-скриптом?

Я попробовал вышеприведенную ссылку -- увы, воспроизводит с начала.
Eugene
Posts: 2804
Joined: Tue Sep 16, 2008 7:30 pm

Re: Помощь в создании подкастов

Post by Eugene »

VVS1234 wrote:
Eugene wrote:Возможно будет полезно: в ссылке на медиа-ресурс могут быть параметры

Code: Select all

?transcoding=1&timestart=количество_секунд
Т.е. плейлист можно сформировать скриптом.
Конечно, было бы полезно... Но, увы, нужны объяснения.

1) Правильно сформированная ссылка должна выглядеть так:
192.168.0.19:45397/MediaServer/VideoItems/765c8fb80fc4ba87b04060b79e7b1011.mpg?transcoding=1&timestart=600
?
2)эти параметры обрабатываются автоматом или их надо перехватывать веб-скриптом?

Я попробовал вышеприведенную ссылку -- увы, воспроизводит с начала.
Параметры обрабатываются HMS-сервером и работают, но есть проблема с продолжением транскодирования по предыдущему запросу при смене значения timestart, возможно с этим и столкнулись.

По поводу создания плейлиста по папке "Интервал 01 минута", простого пути не нашлось, основная проблема - папки "Интервал 01 минута" еще нет, когда требуется плейлист и классы не поддерживают требуемую функциональность (форсированное создание дочерних элементов).

Шаблон для поиска папки "Интервал 01 минута" в скрипте Web-интерфейса, ссылка на плейлист в строке HmsLogMessage(...

Code: Select all

procedure CheckChildItems(aMediaItem: THmsScriptMediaItem);
begin
  if not aMediaItem.HasChildItems then try
    HmsDownloadUrl('http://' + ServerAddress + aMediaItem.WebLink(aMediaItem));
  except end
end;

function FindIntervalFolder(aMediaItem: THmsScriptMediaItem): THmsScriptMediaItem;
var
  i: Integer;
  MediaItemFolder, TranscodingFolder: THmsScriptMediaItem;
begin
  Result := nil; TranscodingFolder := nil;
  for i := 0 to CurrentMediaItemList.Count - 1 do
    if CurrentMediaItemList[i].Properties[mpiTitle] = 'Транскодирование' then begin
      TranscodingFolder := CurrentMediaItemList[i]; Break
    end;
  if TranscodingFolder <> nil then begin
    CheckChildItems(TranscodingFolder);
    MediaItemFolder := TranscodingFolder.FindItemByProperty(mpiTitle, '(T) ' + aMediaItem.Properties[mpiTitle]);
    if MediaItemFolder <> nil then begin
      CheckChildItems(MediaItemFolder);
      Result := MediaItemFolder.FindItemByProperty(mpiTitle, '(T) Интервал 01 минута ');
      if Result <> nil then
        HmsLogMessage(1, 'http://' + ServerAddress + aMediaItem.WebLink(Result));  // Воспроизведение Всех
    end
  end
end;

VVS1234
Posts: 44
Joined: Sat Oct 13, 2012 10:41 pm

Re: Помощь в создании подкастов

Post by VVS1234 »

Eugene,
все сделал до момента передачи плейлиста.

При получении плейлиста Дюна выдает ошибку -- Ошибка загрузки файла. При проверке по чистому веб-интерфейсу (без плагина) браузер регистрирует ошибку failed loading file.
Та же ситуация при попытке пройти через Дюна веб браузер в папку транскодирования - "Интервал 01 минута" - "воспроизвести все" (в настройках указана передача плейлиста по веб-интерфейсу). Появляется ссылка на m3u плейлист -- и ошибка загрузки файла.

При этом:
1) По веб-интерфейсу на ПК -- все работает. Плейлист грузится и воспроизводится в vlc.
2) Загруженный на ПК плейлист работает на Дюне -- все загружается, видео воспроизводится.

Посмотрите, пожалуйста -- может есть решение?

Иначе придется, видимо, идти через создание плейлиста в файле.
Eugene
Posts: 2804
Joined: Tue Sep 16, 2008 7:30 pm

Re: Помощь в создании подкастов

Post by Eugene »

VVS1234 wrote:Eugene,
все сделал до момента передачи плейлиста.

При получении плейлиста Дюна выдает ошибку -- Ошибка загрузки файла. При проверке по чистому веб-интерфейсу (без плагина) браузер регистрирует ошибку failed loading file.
Та же ситуация при попытке пройти через Дюна веб браузер в папку транскодирования - "Интервал 01 минута" - "воспроизвести все" (в настройках указана передача плейлиста по веб-интерфейсу). Появляется ссылка на m3u плейлист -- и ошибка загрузки файла.
HMS-сервер отдает плейлист (m3u, pls), на этом все заканчивается. Может быть Web Browser Дюны не поддерживает плейлисты.
VVS1234
Posts: 44
Joined: Sat Oct 13, 2012 10:41 pm

Re: Помощь в создании подкастов

Post by VVS1234 »

Работающий скрипт готов :).
К сожалению, использовать шаблон Евгения не удалось -- у меня в интернет подкастах нет папки "транскодирование"ю Поэтому пришлось идти в лоб -- вверх по дереву до root и вниз по ветке транскодиорвания -- Евгений легко узнает останки своего header :oops: . Минусы в том, что идти приходится по именам папок, а значит дублированные названия создадут проблемы. Любые предложения по улучшению приветствуются.

Code: Select all

function TranscodedFolder(var aItem: THmsScriptMediaItem): THmsScriptMediaItem;
var
  i: Integer;
  FolderList: TList;
  sWebLink, sText: string;
  FolderItem: THmsScriptMediaItem;
  
begin
  FolderItem := aItem;
  sText :='';
  if FolderItem <> nil then begin
    FolderList := TList.Create;
    try
      while FolderItem <> HmsFindMediaFolder(mfVideoItemsFolderID) do begin
        sText := sText +'\'+ FolderItem.Properties[mpiTitle];
        FolderList.Add(FolderItem);
        FolderItem := FolderItem.ItemParent;
        sText := sText +'\'+ FolderItem.Properties[mpiTitle];
      end;
      HmsLogMessage(1,sText);
      sText :='';
      FolderItem := HmsFindMediaFolder(mfVideoTranscodingItemsID );
      for i := FolderList.Count - 1 downto 0 do begin
        if(THmsScriptMediaItem(FolderList[i]).IsFolder) then
          FolderItem := FolderItem.FindItemByProperty(mpiTitle,THmsScriptMediaItem(FolderList[i]).Properties[mpiTitle ])
        else
          FolderItem := FolderItem.FindItemByProperty(mpiFilePath,THmsScriptMediaItem(FolderList[i]).Properties[mpiFilePath ]);
        sText := sText +'\'+ FolderItem.Properties[mpiTitle];
      end;
    except
      FolderItem := aItem
    end
  end;
      Result := FolderItem.FindItemByProperty(mpiTitle, '(T) Èíòåðâàë 01 ìèíóòà ');
  if Result = nil then
    Result:= aItem;
  sText := sText +'\'+ Result.Properties[mpiTitle];
  HmsLogMessage(1,sText);
end;

var
  Item: THmsScriptMediaItem;
begin
     Item := CurrentMediaItem;
     Item := TranscodedFolder (Item);                        
     sWebLink := 'http://' + ServerAddress + '/MediaServer/Playlists/'+Item.Properties[mpiItemID] + '.m3u?fileext=.m3u';
     HmsStringToFile(HmsDownloadURL(sWebLink),ProgramPath + '\flv_playlist.m3u');
     sWebLink := ProgramPath + '\flv_playlist.m3u';
end.   
Изменения:
28.12.12 Почищенная и улучшенная версия.
Внимание -- при некоторых условиях (точно пока не знаю, возможно, при большом объеме подкаст-ресурсов) функция FindItemByProperty (равно как и все .child-методы) может работать некорректно на папках внутри "Транскодирование", особенно внутри папок "(Т) ..." (проверено на 2-х компах -- win XP и win 7). Лечится командой "Открыть все" на папке "Транскодирование" либо на папке интересующего подкаста -- при раскрытой папке скрипт работает штатно.
VVS1234
Posts: 44
Joined: Sat Oct 13, 2012 10:41 pm

Re: Помощь в создании подкастов

Post by VVS1234 »

HMS-сервер отдает плейлист (m3u, pls), на этом все заканчивается. Может быть Web Browser Дюны не поддерживает плейлисты.
Дюна поддерживает плейлисты. Даже если выбрать параметр "передавать плейлист при веб-навигации" Дюна работает штатно как по одиночным файлам, так и по списку серий.

Проблема возникает почему-то только для папки поминутной разбивки. Может, проблема в настройках у меня? Проверьте, если можно, воспроизводима ли проблема.
VVS1234
Posts: 44
Joined: Sat Oct 13, 2012 10:41 pm

Re: Помощь в создании подкастов

Post by VVS1234 »

VVS1234 wrote:Работающий скрипт готов :)
Поскольку поминутная разбивка требует установки длительности видео -- написал скрипт обработки медиа-ресурсов в "Подкастах", назначающий всем видео длительность 100 минут, если не задано иной. Буду искренне рад рекомендациям по улучшению.

Code: Select all

var
  FolderList, SiblingsList: TList;
  k: integer;

function GetSiblingsList(aItem: THmsScriptMediaItem): TList;
var
   i: integer;
   SiblingsList: TList;
begin
   SiblingsList := TList.Create; 
   for i:= 0 to aItem.ItemParent.ChildCount - 1 do begin
      SiblingsList.Add(aItem.ItemParent.ChildItems[i]);   
   end;
   result := SiblingsList
end;

procedure ProcessItem(aItem: THmsScriptMediaItem);
var
  i: Integer;
begin
  if(aItem.MediaType = mtVideo)then 
  if (length(aItem.Properties[mpiTimeLength ])=0) then
     aItem.Properties[mpiTimeLength ] := '1:40:00.000';  

end;

var
  i,l: Integer;
  Podcasts, aItem: THmsScriptMediaItem;
begin

  Podcasts := HmsFindMediaFolder(mfVideoPodcastsFolderItemID);
  if (Podcasts <> nil) and (Podcasts.ChildCount > 0) then begin
    HmsShowProgress('Установка длительности по умолчанию...');
        FolderList := TList.Create;
        aItem := THmsScriptMediaItem(Podcasts.ChildItems[0]);
        FolderList.Add(aItem);
  for k := 0 to Podcasts.ChildCount-1 do begin
        FolderList := TList.Create;
        aItem := THmsScriptMediaItem(Podcasts.ChildItems[k]);
        FolderList.Add(aItem);
    hmslogmessage(1,THmsScriptMediaItem(FolderList[0]).Properties[mpiTitle]);
  if (THmsScriptMediaItem(FolderList[0]) <> nil) and (THmsScriptMediaItem(FolderList[0]).ChildCount > 0) then begin
    
    try
        repeat
          aItem := aItem.ChildItems[0];
          FolderList.Add(aItem)
        until (aItem.ChildCount = 0);
        repeat
    HmsShowProgress('Установка длительности по умолчанию '+THmsScriptMediaItem(FolderList[0]).Properties[mpiTitle]+'...');
          if HmsCancelPressed then
            Break
          else begin  
            l:=FolderList.Count-1;
            for i:= 0 to THmsScriptMediaItem(FolderList[l]).ItemParent.ChildCount - 1 do begin
                ProcessItem(THmsScriptMediaItem(FolderList[l]).ItemParent.ChildItems[i]); 
                HmsSetProgress(Round(((i + 1) / THmsScriptMediaItem(FolderList[l]).ItemParent.ChildCount) * 100))
            end;
            repeat
              FolderList.Delete(l);
              l := l-1;
              
              SiblingsList := GetSiblingsList(THmsScriptMediaItem(FolderList[l]));
              i:= SiblingsList.IndexOf(THmsScriptMediaItem(FolderList[l]));
            until ((l = 0) or (i <(SiblingsList.Count-1)));
            if (l<>0) then begin
              k:=0;
              repeat
                i := i+1;
                FolderList[l] := Siblingslist[i];
              until(Length(THmsScriptMediaItem(FolderList[l]).Properties[mpiTitle])<>0); 
              aItem := THmsScriptMediaItem(FolderList[l]);
              if aItem.HasChildItems then
                repeat
                  aItem := aItem.ChildItems[0];
                  FolderList.Add(aItem)
                until (aItem.ChildCount = 0);
            end;            
          end;
        until l=0;

    finally
      HmsHideProgress
    end
  end;  
  end;  
    if HmsCancelPressed then
      MessageDlg('Установка длительности видео прервано пользователем.', mtError, mbOK, 0)
    else begin
      HmsDatabaseAutoSave;
      MessageDlg('Установка длительности видео прошло успешно.', mtInformation, mbOK, 0)
    end  
    end else
    MessageDlg('Нет файлов для обработки.', mtError, mbOK, 0);
  ProcessMediaResult := True      
end.
slawa321
Posts: 224
Joined: Wed Sep 14, 2011 12:06 pm

Re: Помощь в создании подкастов

Post by slawa321 »

А не проще в тех подкастах ,где нет вычисления длительности прописать одну строчку

Code: Select all

Item.Properties[mpiTimeLength ] := '1:40:00.000';
что и делалось всегда и не городить огород.
Моя мультимедия :Телевизор Samsung LE46D550K1, Телефон HTC HD2
VVS1234
Posts: 44
Joined: Sat Oct 13, 2012 10:41 pm

Re: Помощь в создании подкастов

Post by VVS1234 »

slawa321 wrote:А не проще в тех подкастах ,где нет вычисления длительности прописать одну строчку

Code: Select all

Item.Properties[mpiTimeLength ] := '1:40:00.000';
что и делалось всегда и не городить огород.
теоретически -- да. Но когда уже много подкастов и каждый обновляется 1-4 часа, то править скрипт + обновлять их все с новой формулой -- напряжно. Скрипт работает по готовой структуре и гораздо быстрее. Хотя и с ним проставить все длительности у меня заняло 2 часа!
Post Reply