jeamdany wrote:Можно просто популярно разложить структуру XML для формирования файла, понятного HMS? Пока-что все мои попытки вывести из ядра читаемый список на основе подсмотренного в готовых HDR успехом не увенчались - HMS постоянно чего-то не видит или не понимает. Можно где-то увидеть доступный человеческому мозгу синтаксис? Мне не нужна обработка скриптов - я добровоьно отдаю данные.
Структура XML файла подкаста (файл с расширением .hdf) довольна проста и по сути - сериализованный объект базы данных программы класса THmsScriptMediaItem (описан в справочнике редактора скриптов). Все свойства класса в XML как элементы (без атрибутов).
А на пальцах, примерно следующее.
Корневой элемент: HmsMediaItem. С него всё начинается. Это элемент базы данных.
У него есть свойства:
MediaType - тип медиа-ссылки. Значение перечисления {mtUnknown=0, mtAudio=1, mtImage=2, mtVideo=3, mtText=4, mtIsoDisk=5}
ClassID - Идентификатор класса элемента базы.
- 51 - папка подкастов раздела "Видео"
- 53 - подкаст раздела "Видео"
- 32 - динамическая папка скриптов
- 78 - папка подкастов раздела "Фото"
- 54 - папка подкастов раздела "Музыка"
- 3 - ссылка на музыкальный файл в разделе "Музыка"
- 4 - ссылка на файл фотографии в разделе "Фото"
- 5 - ссылка на видео файл в разделе "Видео"
- ...
К сожалению, я всех их не знаю.
ItemID - GUID элемента (уникальный идентификатор)
ItemPath - Ссылка (путь)
ParentID - GUID родителя. Значение ItemID элемента, содержащего данный.
- [+] Вот тут небольшие пояснения по свойству ParentID
- Если с подчинёнными элементами всё понятно, что это поле будет содержать значение ItemID папки, в который они входят. То самый верхний, корневой элемент тоже должен указать, к какой системной папке он принадлежит. Идентификаторы системных папок в базе данных программы определены.
Идентификаторы папок медиа-ресурса:
Code: Select all
mfAudioAlbumsItemID = "CB5F0F05-1530-4E89-8FBB-8221F51B3208" - Папка "Альбомы" в разделе "Музыка"
mfAudioAllMusicItemID = "3A7A26E4-4A50-47DA-B192-AB40740A3AFE" - Папка "Вся музыка" в разделе "Музыка"
mfAudioArtistsItemID = "415009C9-15C4-43A6-A1C0-F8D835BC562E" - Папка "Исполнители" в разделе "Музыка"
mfAudioAudioDVBFolderItemID= "A96C242D-1AF1-4659-BEC3-D1D2670992ED" - Папка "Цифровое телевидение (DVB)" в разделе "Музыка"
mfAudioFavoritesItemID = "AF4BDFC9-27A6-4260-BEE8-C7522B99D43F" - Папка "Избранные" в разделе "Музыка"
mfAudioGenresItemID = "BE22B4D4-0CCA-4E84-8C41-F5E9B729ED49" - Папка "Жанры" в разделе "Музыка"
mfAudioInternetRadioItemID = "F38A68A9-EF1A-4862-972C-1E254946A010" - Папка "Интернет радио" в разделе "Музыка"
mfAudioIsoImagesItemID = "492D4EA2-D5BB-4A03-B8B7-8CA0627CB547" - Папка "Образы CD/SACD/DVD/DVD-A/BD (ISO)" в разделе "Музыка"
mfAudioItemsFolderID = "0972345A-4255-4ECA-98A1-F326465BA727" - Корневая папка "Музыка" в разделе "Музыка"
mfAudioPlaylistsItemID = "F8799AE6-8D34-4D9F-9EE1-D5DDC4E3E479" - Папка "Списки воспроизведения" в разделе "Музыка"
mfAudioPodcastsFolderItemID= "D07257A1-2B10-4D2B-9A4C-9C65C6F5B394" - Папка "Подкасты" в разделе "Музыка"
mfAudioRemovableMediaItemID= "18DDA617-0C7F-4388-9544-06BE5CB17C82" - Папка "Съемные носители" в разделе "Музыка"
mfAudioTranscodingItemsID = "BFB7F952-2FFA-4B01-A67A-BE6FCF91E237" - Папка "Транскодирование" в разделе "Музыка"
mfAudioWatchFoldersItemID = "1D45C463-2837-4FC7-ADD1-C21A1BD68C94" - Папка "Каталоги медиа-ресурсов" в разделе "Музыка"
mfImageAlbumsItemID = "A86A97DE-6391-4F17-A248-556A744D3BC3" - Папка "Альбомы" в разделе "Фото"
mfImageAllPicturesItemID = "7CB8AC81-5BA3-4B2B-8530-205207393D90" - Папка "Все фото" в разделе "Фото"
mfImageByDateItemID = "7BF63B5A-15A3-4273-8B1F-7317B60C0099" - Папка "По дате" в разделе "Фото"
mfImageFavoritesItemID = "E2F790FB-7752-44E7-99C5-D56F6EE94A0E" - Папка "Избранные" в разделе "Фото"
mfImageIsoImagesItemID = "20545244-E039-4185-8505-877BD5050514" - Папка "Образы CD/SACD/DVD/DVD-A/BD (ISO)" в разделе "Фото"
mfImageItemsFolderID = "8ED989F8-10E9-4B9A-8EAE-E8150BE7A302" - Корневая папка "Фото" в разделе "Фото"
mfImageRemovableMediaItemID= "D5BDC974-E715-472B-9529-F30BD812CC2B" - Папка "Съемные носители" в разделе "Фото"
mfImageTranscodingItemsID = "51CD16BC-BCEA-41F5-89DC-DB299527C5D4" - Папка "Транскодирование" в разделе "Фото"
mfImageWatchFoldersItemID = "4588975D-B5E2-46DA-A859-07313C715BB1" - Папка "Каталоги медиа-ресурсов" в разделе "Фото"
mfVideoActorsItemID = "EA46E456-5895-4C27-9BDC-9221CA8011D1" - Папка "Альбомы" в разделе "Фильмы"
mfVideoAllMoviesItemID = "95D6D9F3-C720-4721-9315-94E82554630C" - Папка "Все фильмы" в разделе "Фильмы"
mfVideoCollectionsItemID = "64AC312B-A76A-46F3-980F-D0DA0EEE188D" - Папка "Коллекции" в разделе "Фильмы"
mfVideoDVBFolderItemID = "475F1DFE-1851-48F5-99ED-B4EAB3DF8D79" - Папка "Цифровое телевидение (DVB)" в разделе "Фильмы"
mfVideoDirectorsItemID = "D90D367E-E3ED-4897-8A68-34C31FDA1312" - Папка "Режиссеры" в разделе "Фильмы"
mfVideoFavoritesItemID = "864F0C0A-A1D3-48AE-ABFE-51612200967A" - Папка "Избранные" в разделе "Фильмы"
mfVideoGenresItemID = "2A725EFC-9D48-4159-96E6-24B0F4791E0F" - Папка "Жанры" в разделе "Фильмы"
mfVideoInternetTelevisionItemID = "085C4743-A4DC-43B3-AB29-957BB759C6DF" - Папка "Интернет телевидение" в разделе "Фильмы"
mfVideoIsoImagesItemID = "A8D11DA7-0A19-40D5-BB83-2BBA7036F214" - Папка "Образы CD/SACD/DVD/DVD-A/BD (ISO)" в разделе "Фильмы"
mfVideoItemsFolderID = "4B011F97-1151-45B1-A954-76BDFCAE746A" - Корневая папка "Фильмы" в разделе "Фильмы"
mfVideoPodcastsFolderItemID= "234DF17B-418C-4FDC-9DFE-CD0C586D2E76" - Папка "Подкасты" в разделе "Фильмы"
mfVideoProducersItemID = "AFA69EA9-3AC3-4ABD-AE81-90EEDC8CB97A" - Папка "Продюсеры" в разделе "Фильмы"
mfVideoRemovableMediaItemID= "D321AB9B-3AE5-46A4-9D98-59F5D653218B" - Папка "Съемные носители" в разделе "Фильмы"
mfVideoTranscodingItemsID = "9F95A59C-E171-4B31-B5E6-AEEF379AED9F" - Папка "Транскодирование" в разделе "Фильмы"
mfVideoWatchFoldersItemID = "B7A1EE6A-CE07-4E09-B5ED-E51D22BBE743" - Папка "Каталоги медиа-ресурсов" в разделе "Фильмы"
Например, корневой элемент сохранённого подкаста для раздела видео будет содержать значение ParentID = 234DF17B-418C-4FDC-9DFE-CD0C586D2E76.
Properties - список свойств элемента. Где каждый элемент называется Property и имеет элементы ID и Value.
- [+] Пояснения к свойству Properties
- ID - от 0 до 1000 зарезервированы и используются как служебные данные для программы. C ID свыше 1000 - это любые пользовательские данные.
Например, ID=4 - это наименование медиа-ссылки, в значении с ID=530 может хранится скрипт чтения списка ресурсов.
Вот некоторые значение ID и их описание:
4 - Наименование
3 - Длительность (в виде 00:00:00.000)
8 - Год
9 - Жанр
41 - Комментарий
35 - Дата/время создания
215 - Сортировка (может быть указан ID по которому нужно сортировать, минус в начале говорит об обратной сортировке)
Более полный список возможных ID можно посмотреть в редакторе скриптов, в справочнике в разделе "Константы" - "Идентификаторы параметров медиа-ресурса". Все константы, начинающиеся на mpi...
ChildItems - список дочерних элементов. Элементы Item (вместо корневого названия HmsMediaItem) - по сути те же самые элементы, с точно такой-же структурой как здесь и описано. Только свойство MediaType могут не иметь.
Подозреваю, что почти со всем этим вы и так разобрались, изучая строение hdf файла.
Но тут есть некоторые нюансы. Есть особенности программы HMS. Из-за чего вполне можно нарваться на "невидимость" созданных элементов в программе.
Дело в том, что при сохранении подкаста из программы в файл, видимо, также и при загрузке его в программу - не всегда учитываются дочерние элементы медиа-ресурса.
У элемента с ClassID = 53 (подкаст, большой оранжевый полосатый значок в программе) хоть в программе и могут быть подчинённые элементы с папками и ссылками, то при сохранении или загрузке в программу они не читаются (не учитываются). Этот элемент - обновляемый и предназначен для
динамического создания ссылок внутри себя. Т.е. создания ссылок при его
обновлении.
Поэтому, если вы хотите создать файл .hdf с уже заложенными ссылками на файлы, то вам нужно создать папку подкастов (ClassID = 51). Вот в ней сохраняются и загружаются ссылки на видео файлы.
Т.е. Создать корневой элемент с ClassID=51, а в ней уже в ChildItems создавать дочерние элементы Item с ClassID=51 или ClassID=5 (папки или ссылки на файлы).
Как-то так.
Могу помочь в написании скрипта или функции на пэхэпе, или какими-то разъяснениями по программе или коду (насколько знаю).
- [+] Пример
- Папка "Фильмы мегасайта" содержит папку "Трейлеры", которая содержит две ссылки на видео.
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<HmsMediaItem>
<MediaType>3</MediaType> <!-- Тип медиа-ресурса mtVideo -->
<ClassID>51</ClassID> <!-- ClassID=51 - папка подкастов раздела "Видео" -->
<ItemID>47d2c3a8-44b7-4b36-af70-2d3eca300302</ItemID> <!-- GUID (уникальный идентификатор элемента) -->
<ItemPath></ItemPath> <!-- Путь, ссылка (не указана) -->
<ParentID>234DF17B-418C-4FDC-9DFE-CD0C586D2E76</ParentID> <!-- GUID родительской папки -->
<Properties> <!-- Список свойств -->
<Property> <!-- элемент свойства -->
<ID>4</ID> <!-- ID=4 - наименование -->
<Value>Фильмы мегасайта</Value> <!-- значение свойства -->
</Property>
</Properties>
<ChildItems> <!-- список дочерних элементов -->
<Item>
<ClassID>51</ClassID> <!-- Класс 51 - папка подкастов раздела "Видео" -->
<ItemID>58d2c3a8-81b8-2e32-dd31-fd3eca50a113</ItemID> <!-- GUID -->
<ItemPath>Трейлеры</ItemPath> <!-- Путь, ссылка (у папки она не важна) -->
<ParentID>47d2c3a8-44b7-4b36-af70-2d3eca300302</ParentID> <!-- GUID родительской папки -->
<Properties> <!-- Список свойств -->
<Property> <!-- элемент свойства -->
<ID>4</ID> <!-- ID=4 - наименование -->
<Value>Трейлеры</Value> <!-- значение свойства -->
</Property>
<Property> <!-- элемент свойства -->
<ID>3</ID> <!-- ID=3 - длительность -->
<Value>00:02:20.000</Value> <!-- значение свойства -->
</Property>
</Properties>
<ChildItems> <!-- Список дочерних элементов -->
<Item>
<ClassID>5</ClassID> <!-- ClassID=5 - ссылка на файл раздела "Видео" -->
<ItemID>1c294d78-e1b4-4563-a0c2-5e3ee91684cc</ItemID> <!-- GUID (уникальный идентификатор элемента) -->
<ItemPath>http://www.hdclub.ua/files/avpedia_test/tron_legacy_trailer.mp4</ItemPath> <!-- Путь, ссылка на файл -->
<ParentID>58d2c3a8-81b8-2e32-dd31-fd3eca50a113</ParentID> <!-- GUID родительской папки -->
<Properties> <!-- Список свойств -->
<Property> <!-- элемент свойства -->
<ID>4</ID> <!-- ID=4 - наименование -->
<Value>Tron Legacy (Трон) - 1080p Theatrical Trailer</Value>
</Property>
<Property> <!-- элемент свойства -->
<ID>3</ID> <!-- ID=3 - длительность -->
<Value>00:02:20.000</Value>
</Property>
</Properties>
</Item>
<Item>
<ClassID>5</ClassID> <!-- ClassID=5 - ссылка на файл раздела "Видео" -->
<ItemID>2c294d78-e1b4-4563-a0c2-5e3ee91684cd</ItemID> <!-- GUID (уникальный идентификатор элемента) -->
<ItemPath>http://www.hdclub.ua/files/avpedia_test/inception_trailer.mp4</ItemPath> <!-- Путь, ссылка на файл -->
<ParentID>58d2c3a8-81b8-2e32-dd31-fd3eca50a113</ParentID> <!-- GUID родительской папки -->
<Properties> <!-- Список свойств -->
<Property> <!-- элемент свойства -->
<ID>4</ID> <!-- ID=4 - наименование -->
<Value>Inception (Начало) - 1080p Theatrical Trailer</Value>
</Property>
<Property> <!-- элемент свойства -->
<ID>3</ID> <!-- ID=3 - длительность -->
<Value>00:02:23.000</Value>
</Property>
</Properties>
</Item>
</ChildItems>
</Item>
</ChildItems>
</HmsMediaItem>
Мне вот интересно, такой файл будет содержать тысячи ссылок на видео с разделами по категориям и прочим?
Может проще сделать API, чтобы внешние программы или скрипты могли не сильно нагружая сервер делать запросы и получать нужную сжатую информацию, например в виде JSON?