You are viewing r_a_d

 
 
08 July 2005 @ 11:24 am
[video] Kino und tagesschau.de  
Перевёл интересную статью про Kino. Поправки к переводу приветствуются. Последнее предложение в предпоследнем абзаце мозг отказался переводить.

Оригинал статьи
Полтора года назад новостной (и web) телевизионный канал в Германии заключил со мной контракт на доработку Kino под их требования. Я не стал создавать отдельную ветвь разработки, новые возможности стали настраиваемыми. Например, я значительно усовершенствовал вкладку, добавил режим вставки и режим файлов с ведением истории и т.д. Также, я поработал над вкладкой Capture и над общей стабильностью приложения и удобством его использования.

Менее универсальными требованиями были Project ID (идентификатор проекта), Metadata (метаданные) и Publish (публикация). Заказчики желали интегрировать моё приложение в CMS (система управления контентом, что-то особенное основанное на Vignette StoryServer), которая управляет их web сайтом. Сначала я опишу способы использования, затем то, как это реализовано.

Требования к функциональности

Project ID (идентификатор проекта)

При запуске приложения или при выборе через меню File/New, Kino запрашивает имя проекта. Пользователь вводит соответствующий текст и приложение запрашивает CMS, которая возвращает данные об этом проекте.

Metadata (метаданные)

В Kino пользотель может ввести информацию (метаданные) о каждой сцене как заголовок, описание, категория, место съёмки и так далее. По умолчанию значением полей метаданных является произвольный текст, но можно указать, что значения должны выбираться из предопределённого списка. Эти списки значений выбираются из данных о проекте, которые были получены в результате запроса по идентификатору проекта (см. выше).

Publishing (публикация)

Вместо простого сохранения файла происходит отправка содержимого проекта Kino XML на сервер. Опуская детали, этот сервер транскодирует видео в web форматы и взаимодействует с CMS для "добавления" мультимедийных объектов в статьи и т.д. Также, есть возможность отсылать снимок кадра из вкладок Edit или Trim в систему управления контентом.

Реализация

Project ID

Если вы определите значение для конфигурационного ключа newProjectURI в ~/.gnome2/kino, тогда Kino будет отображать запрос "Project Name", в противном случае не будет. Если значение конфигурационного ключа, мы говорим про URL, будет содержать '%s', то эта часть будет заменена на значение введённое пользователем. Затем Kino выполнит запрос сервера с этим URL с помощью HTTP клиента использующего libxml2, и будет ожидать в качестве ответа XML документа. Например:
newProjectURI=http://cms/query=%s
вынудит Kino запросить у пользователя имя проекта. Когда пользователь нажмёт OK, сервер возвратит следующий XML:
<storylist id="1234">
  <story id="56789">
    <title>Kino 0.7.1 is Released<title>
  </story>
  <story></story>
  ...
</storylist>


Для облегчения процесса публикации, идентификатор проекта может быть извлечён из XML, для этого надо определить конфигурационный ключ newProjectXPath, значение которого соответствует значению узла, который указан с помощью выражения XPath. Используя предыдущий пример:
newProjectXPath=/storylist/@id
вынудит Kino определить актуальный идентификатор статьи и ассоциировать его с этим проектом.

Metadata

Kino отображает редактируемые поля для метаданных в виде дочерних элементов дерева сцен на Storyboard. Существует основной набор полей основанный на спецификации SMIL. Можно определить собственный список полей, дополнив содержимое конфигурационного ключа metaNames. Значением ключа является список слов разделённых с помощью запятых. Эти слова становятся XML атрибутами, таким образом, они должны подчиняться правилам XML об именовании атрибутов (никаких пробелов и стрёмных символов). Если в качестве первого символа указан '*', то поле для метаданных всегда добавляется к сцене и своим видом требует от пользователя указать значение :-). Тэг метаданных становится частью проекта Kino XML, даже если пользователь не ввёл значение, т.к. проверка значения не производится.

Конфигурационный ключ metaValues_ создаёт список значений. Данный ключ является основой для настоящего ключа, который создаётся динамически на основе списка в metaNames. Для каждого элемента metaNames существует конфигурационный ключ metaValues_item. Значением такого динамического конфигурационного элемента является список слов или пар метка/значение. Если в качестве значения определено '*', то пользователь может также вводить значение неопределённое в списке.

Список может содержать пару метка=значение. Метка отображается пользователю, в то время как значение скрыто и используется в значении атрибута XML. Если значение пары начинается с "xpath:", то metaValues раскрывается с помощью отклика от newProjectURI. Следует запомнить, что запрос XPath может вернуть коллекцию узлов. Пары текст/значение этих узлов используются для построения списка замены метка/значения. Пример:
metaNames=*title
вынудит Kino автоматически добавить и отобразить только один элемент метаданных.
metaValues_title=xpath:/storylist/story/title=xpath:/storylist/story/@id
вынудит Kino отобразить статьи как список из которого можно выбрать одно значение. Заголовки отображаются пользователю, но соответствующий идентификатор статьи хранится в XML! Далее, пользователь может только выбрирать значение в списке, так как там нет '*,'. Также, идентификатор статьи сохраняется в XML проекте.

В результате получаем небольшой словарь с данными и реализацию форм, которые я называю "редактированием метаданных" в виде прибамбаса Kino :-). Метаданные сохраняются и загружаются их файла XML проекта. Тем не менее, есть ограничения. Данный подход ограничен фиксированной конфигурацией. Нет возможности иметь по-проектные конфигурации.

Publishing

Если добавить "enablePublish=true" в конфигурационный файл Kino, тогда Kino будет отображать два новых элемента меню и панели инструментов: File/Publish SMIL и File/Publish Still Frame. Эти функции вызывают shell скрипт и передают ему имя файла проекта и идентификатор проекта, полученный с помощью newProjectXPath. Скрипты установлены в каталоге $prefix/share/kino/scripts/publish/, Kino поставляется с примером, который ничего не делает. Параметр $prefix является обычно "/usr" или "/usr/local". Для этих функций у нас есть скрипты frame.sh и project.sh. Функция Publish Still Frame отправляет имя файла с изображением вместо имени файла проекта. Если пользователь не создал ещё файл проекта, то Kino создаёт временный файл, вызывает скрипт и удаляет временный файл после выполнения скрипта. Использование скриптов делает эту особенность открытой и расширяемой!

Да, проблемы тоже присутствуют. Нелегко сделать это стабильным и удобным в использовании. Существует элемент в Preferences/Other заставляющий сцены распахиваться для более быстрого доступа к метаданным. There was some nice subtley added for no charge like as Kino detects a scene change in the DV stream in Capture, it adds the previous scene to the Storyboard so you can start adding the metadata.

Круто! Не так ли? Желаете интегрироваться с собственным сайтом? Может это быть использовано для создания видео журнала и соответствующих инструментов?
 
 
Current Music: deadwood