Домашний медиа-сервер (UPnP, DLNA, HTTP) Домашний медиа-сервер (UPnP, DLNA, HTTP) Домашний медиа-сервер (UPnP, DLNA, HTTP)
Главная Решения пользователей программы "Домашний медиа-сервер (UPnP, DLNA, HTTP)"
 
Текущее время: Вс авг 01, 2021 11:30 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 66 сообщений ]  На страницу Пред. 1 2 3 4 5 6 7 След.
Автор Сообщение
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Вс дек 23, 2012 2:14 pm 
Не в сети

Зарегистрирован: Вт сен 16, 2008 7:30 pm
Сообщения: 2780
slawa321 писал(а):
Eugene писал(а):
Возможно будет полезно: в ссылке на медиа-ресурс могут быть параметры
Код:
?transcoding=1&timestart=количество_секунд


Т.е. плейлист можно сформировать скриптом.


Я чего то недопонимаю :
Добавил в скрипте получения ссылки
MediaResourceLink := video+'?transcoding=1&timestart=500';
Фильм с vk.com все равно запустился сначало ,а как надо?

Речь о web-интерфейсе и ссылке HMS-сервера.


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Вс дек 23, 2012 4:23 pm 
Не в сети

Зарегистрирован: Сб окт 13, 2012 10:41 pm
Сообщения: 44
Eugene писал(а):
Возможно будет полезно: в ссылке на медиа-ресурс могут быть параметры
Код:
?transcoding=1&timestart=количество_секунд


Т.е. плейлист можно сформировать скриптом.


Конечно, было бы полезно... Но, увы, нужны объяснения.

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

Я попробовал вышеприведенную ссылку -- увы, воспроизводит с начала.


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Вс дек 23, 2012 11:22 pm 
Не в сети

Зарегистрирован: Вт сен 16, 2008 7:30 pm
Сообщения: 2780
VVS1234 писал(а):
Eugene писал(а):
Возможно будет полезно: в ссылке на медиа-ресурс могут быть параметры
Код:
?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(...

Код:
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;



Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Пн дек 24, 2012 11:46 am 
Не в сети

Зарегистрирован: Сб окт 13, 2012 10:41 pm
Сообщения: 44
Eugene,
все сделал до момента передачи плейлиста.

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

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

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

Иначе придется, видимо, идти через создание плейлиста в файле.


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Пн дек 24, 2012 1:33 pm 
Не в сети

Зарегистрирован: Вт сен 16, 2008 7:30 pm
Сообщения: 2780
VVS1234 писал(а):
Eugene,
все сделал до момента передачи плейлиста.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Пн дек 24, 2012 1:41 pm 
Не в сети

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

Код:
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). Лечится командой "Открыть все" на папке "Транскодирование" либо на папке интересующего подкаста -- при раскрытой папке скрипт работает штатно.


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Пн дек 24, 2012 1:48 pm 
Не в сети

Зарегистрирован: Сб окт 13, 2012 10:41 pm
Сообщения: 44
Цитата:
HMS-сервер отдает плейлист (m3u, pls), на этом все заканчивается. Может быть Web Browser Дюны не поддерживает плейлисты.


Дюна поддерживает плейлисты. Даже если выбрать параметр "передавать плейлист при веб-навигации" Дюна работает штатно как по одиночным файлам, так и по списку серий.

Проблема возникает почему-то только для папки поминутной разбивки. Может, проблема в настройках у меня? Проверьте, если можно, воспроизводима ли проблема.


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Вт дек 25, 2012 8:33 pm 
Не в сети

Зарегистрирован: Сб окт 13, 2012 10:41 pm
Сообщения: 44
VVS1234 писал(а):
Работающий скрипт готов :)


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

Код:
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.


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Ср дек 26, 2012 5:43 am 
Не в сети

Зарегистрирован: Ср сен 14, 2011 12:06 pm
Сообщения: 224
А не проще в тех подкастах ,где нет вычисления длительности прописать одну строчку
Код:
Item.Properties[mpiTimeLength ] := '1:40:00.000';

что и делалось всегда и не городить огород.

_________________
Моя мультимедия :Телевизор Samsung LE46D550K1, Телефон HTC HD2


Вернуться к началу
 Заголовок сообщения: Re: Помощь в создании подкастов
СообщениеДобавлено: Ср дек 26, 2012 11:32 am 
Не в сети

Зарегистрирован: Сб окт 13, 2012 10:41 pm
Сообщения: 44
slawa321 писал(а):
А не проще в тех подкастах ,где нет вычисления длительности прописать одну строчку
Код:
Item.Properties[mpiTimeLength ] := '1:40:00.000';

что и делалось всегда и не городить огород.


теоретически -- да. Но когда уже много подкастов и каждый обновляется 1-4 часа, то править скрипт + обновлять их все с новой формулой -- напряжно. Скрипт работает по готовой структуре и гораздо быстрее. Хотя и с ним проставить все длительности у меня заняло 2 часа!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 66 сообщений ]  На страницу Пред. 1 2 3 4 5 6 7 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB