Расширьте возможности своих приложений с помощью возможностей редактирования видео в браузере, чтобы упростить и упростить создание и обмен видео внутри ваших приложений.
Этот репозиторий представляет собой эталонное приложение NodeJS, которое демонстрирует, как встроить приложение Kaltura Editor в хост-приложение NodeJS.
Это очень простое приложение на основе экспресс-узла (созданное с помощью Express Generator).
Возможности приложения Kaltura Editor включают в себя ; Позволяет конечным пользователям создавать видеоклипы. Поддержка ключевых точек, титров и многопоточного контента. Аудиографик для обнаружения тихих зон. Обрезка длинных видеороликов посередине. Совместимость с браузерами настольных компьютеров и планшетов. Простота в использовании и доступность. , Настраивается с помощью CSS, Легко интегрируется в любое веб-приложение с помощью безопасного API iframe, Создавайте и редактируйте интерактивные викторины в видео, Используйте для установки ключевых точек для динамической рекламы, Создавайте наложения горячих точек, которые стимулируют действие и многое другое. Чтобы узнать о возможностях редактора Kaltura, посмотрите обучающие видеоролики по редактору Kaltura.
npm install
config.template.json
в config.json
config.json
, настройте по инструкции и удалите все комментарии.DEBUG=kaltura-editor-app-embed:* npm start
set DEBUG=kaltura-editor-app-embed:* & npm start
index
index.pug
).Приложение загружается как iframe следующим образом:
<iframe src="//cdnapisec.kaltura.com/apps/kea/[v<kea_version>|latest]/index.html"></iframe>
Замените
v<kea_version>
наlatest
, чтобы всегда загружать последнюю готовую к производству [стабильную] версию, или установите конкретную версию (список версий, доступных в рабочей версии, см. в официальном журнале изменений).
Например;
<iframe src="//cdnapisec.kaltura.com/apps/kea/v2.28.11/index.html"></iframe>
<iframe src="//cdnapisec.kaltura.com/apps/kea/latest/index.html"></iframe>
Важно ! Не загружайте index.html напрямую, его следует загружать только в iFrame.
Интеграция приложения Kaltura Editor осуществляется путем встраивания iFrame в ваше веб-приложение. Связь с приложением-редактором (вызов действий и реакция на события) осуществляется с помощью API postMessage.
В этом репозитории вы также найдете полные эталонные примеры реализации (в каталоге reference-samples, соответствующем каталоге языка программирования).
Редактор Kaltura ожидает сеанс Kaltura (KS) в трех событиях postMessage:
userId
, который будет представлять правильный userId
в вашей системе. Этот userId
будет принадлежать вновь созданным записям (если вы используете «Сохранить как» или создаете новый тест).sview:<entryId>
чтобы обойти любые специальные ограничения контроля доступа.edit:<entryId>
.edit:<entryId>
. userId
при создании сеанса, чтобы анонимно просмотреть отредактированную запись (это гарантирует, что при ответе на тест во время предварительного просмотра он не будет зарегистрирован как реальный пользователь во время предварительного тестирования).sview:<entryId>
чтобы обойти любые специальные ограничения контроля доступа.disableentitlementforentry:<entryId>
, чтобы обойти специальные настройки разрешений для сеанса предварительного просмотра.setrole:PLAYBACK_BASE_ROLE
, чтобы этому сеансу не было разрешено выполнять действия, кроме действий воспроизведения, необходимых для предварительного просмотра новой записи. В вашем коде, куда встроен редактор iFrame, настройте прослушиватель postMessages для связи с API редактора:
var initParamsListener = window . addEventListener ( 'message' , function ( e ) {
var postMessageData ;
try {
postMessageData = e . data ;
}
catch ( ex ) {
return ;
}
postMessageData
будет содержать имя события postMessage для обработки (messageType
) и все соответствующие полезныеdata
.
Когда редактор будет готов, он вызовет событие postMessage kea-bootstrap
. Перехватите это событие и в ответ вызовите postMessage kea-config
чтобы передать параметры инициализации приложению-редактору:
if ( postMessageData . messageType === 'kea-bootstrap' ) {
e . source . postMessage ( {
'messageType' : 'kea-config' ,
'data' : { /* ADD HERE ALL THE EDITOR INITIALIZATION PARAMS */ }
} , e . origin )
}
В атрибуте данных сообщения kea-config
postMessage вам необходимо передать параметры инициализации. Ниже представлен подробный обзор всех доступных параметров.
service_url
: URL-адрес службы Kaltura, который будет использоваться при отправке запросов API (базовая конечная точка API), обычно https://www.kaltura.com/
.partner_id
: идентификатор учетной записи Kaltura (он же PartnerId), который нужно использовать.ks
: сгенерированная строка сеанса Kaltura, с помощью которой редактор будет аутентифицироваться.entry_id
: идентификатор видеозаписи, которую нужно отредактировать (обрезать или отредактировать тест) или клонировать (создать новый клип или клонировать для нового теста).player_uiconf_id
: идентификатор uiconf экземпляра Kaltura Player, который будет использоваться для проигрывателя представления редактирования (вы можете найти его на вкладке KMC Studio). Убедитесь, что используемый вами плеер НЕ настроен на автоматическое воспроизведение (убедитесь, что autoPlay=false
в конфигурации плеера, или используйте Studio для редактирования плеера и снимите флажок «Автовоспроизведение» в основных настройках).load_thumbnail_with_ks
: логическое значение (по умолчанию — false), указывающее, следует ли добавлять KS к URL-адресу миниатюр в случае, если ваша учетная запись настроена на требование KS для URL-адресов миниатюр (не рекомендуется, поскольку это предотвратит кэширование миниатюр). tabs
: отображаемые вкладки приложения-редактора и соответствующие разрешения, которые можно включить.
edit
— будет ли вкладка «Обрезка и обрезка» видео. Поддерживаемые разрешения: 'clip'
(включает «Сохранить как» для создания нового видеоклипа) и 'trim'
(включает «Сохранить» для изменения загруженного источника видеозаписи).quiz
— включит вкладку создания/редактирования викторины. Базовая доступная возможность — это тип вопроса «Множественный выбор». Поддерживаемые разрешения: 'quiz'
(всегда включайте ее, если хотите включить викторину), 'questions-v2'
(типы вопросов «Точка размышления» и «Верно/Ложно»), 'questions-v3'
(тип «Открытый вопрос»). )hotspots
— активирует вкладку «горячие точки», позволяющую добавлять на видео наложения с призывом к действию.advertisements
– включит вкладку рекламы в середине ролика.Примечание. Новая запись теста создается автоматически, когда пользователь нажимает кнопку «Начать» на вкладке создания теста.
В следующем примере показана конфигурация всех доступных вкладок и разрешений (тест, обрезка и обрезка):
'tabs' : {
'edit' : {
name : 'edit' ,
permissions : [ 'clip' , 'trim' ] ,
userPermissions : [ 'clip' , 'trim' ] ,
showOnlyExpandedView : true ,
showSaveButton : false ,
showSaveAsButton : false
} ,
'quiz' : {
name : 'quiz' ,
permissions : [ 'quiz' , 'questions-v2' , 'questions-v3' ] ,
userPermissions : [ 'quiz' ]
} ,
'advertisements' : {
name : 'advertisements' ,
permissions : [ 'CUEPOINT_MANAGE' , 'FEATURE_DISABLE_KMC_KDP_ALERTS' ] ,
showSaveButton : false
} ,
'hotspots' : {
name : 'hotspots' ,
showSaveButton : false
}
}
Редактор позволяет скрывать кнопки «Сохранить» и «Сохранить как», чтобы хост-приложение вместо этого отображало свои собственные кнопки:
editor
— предоставляет showSaveButton
, чтобы скрыть кнопку «Сохранить» (обрезать), и showSaveAsButton
, чтобы скрыть кнопку «Сохранить как» (клип).hotspos
и advertisements
: откройте showSaveButton
, чтобы скрыть кнопку «Сохранить» (на этих вкладках не создается новая запись). Параметр tab
: начальная вкладка для запуска текущего сеанса приложения:
editor
для вкладки «Видеоклип» или «Обрезка».quiz
для вкладки «Викторина в видео».advertisements
на вкладке «Реклама в середине ролика».hotspots
— для вкладки «Горячие точки призыва к действию». help_link
: полный URL-адрес, который будет использоваться для «Перейти к руководству пользователя» в компоненте справки редактора (вы можете использовать руководство по умолчанию в качестве ссылки: https://knowledge.kaltura.com/node/1912
).css_url
: полный URL-адрес дополнительного файла CSS для переопределения правил стиля.preview_player_uiconf_id
: Экземпляр Kaltura Player, который будет использоваться для предварительного просмотра. Если не пройти, будет использован основной игрок. Язык выставляется по приоритету:
locale_url
— пользовательский файл локали, полный URL-адрес json-файла с переводами.language_code
— код поддерживаемого языка (например, en
).language_code=en
) используется в качестве локали по умолчанию (если больше ничего не настроено). Поскольку создание сеансов должно выполняться только на стороне сервера (чтобы не раскрывать ваши секретные ключи API или учетные данные), мы рекомендуем создать серверную службу, которая будет вызываться, когда редактор запрашивает новый KS и возвращает необходимый KS для каждого события.
postMessageData.data.entryId
будет содержать идентификатор вновь созданной записи (передайте его в службу генерации KS и верните KS с привилегиями просмотра и редактирования соответственно).messageType: 'kea-ks'
чтобы установить новый KS в редакторе. if ( postMessageData . messageType === 'kea-get-ks' ||
postMessageData . messageType === 'kea-get-preview-ks' )
{
var getKsUrl = 'https://example.com/editor-ks-service/' + '?entryId=' + postMessageData . data . entryId + '&action=' + postMessageData . messageType ;
$ . getJSON ( getKsUrl , null )
. done ( function ( responseData ) {
e . source . postMessage ( {
messageType : 'kea-ks' ,
data : responseData . ks
} , e . origin ) ;
} )
. fail ( function ( jqxhr , textStatus , error ) {
var err = textStatus + ", " + error ;
console . log ( "Get KS for Edit Request Failed: " + err ) ;
} ) ;
}
kea-get-ks
— после создания новой видеозаписи клипа или викторины, чтобы сбросить KS для вновь созданных разрешений на запись.kea-get-preview-ks
— когда пользователь просит просмотреть запись, чтобы установить разрешения для анонимного зрителя, имеющего на это право. Эти события postMessage будут срабатывать в ответ на действия в приложении-редакторе. Обработайте эти события в своем хост-приложении, чтобы продолжить рабочий процесс между редактором и вашим приложением. Например:
kea-trimming-started
Отправляется при запуске действия обрезки. postMessageData.data.entryId
будет содержать идентификатор обрезаемой записи. Ожидаемый ответ: kea-trim-message
, где message.data
— это (локализованный) текст для отображения.
if ( postMessageData . messageType === 'kea-trimming-started' ) {
e . source . postMessage ( {
messageType : 'kea-trim-message' ,
data : 'You must approve the media replacement in order to be able to watch the trimmed media'
} , e . origin )
}
kea-trimming-done
Отправляется после завершения действия обрезки. postMessageData.data.entryId
будет содержать идентификатор обрезанной записи.
if ( postMessageData . messageType === 'kea-trimming-done' ) {
console . log ( 'processing of entry with id ' + message . data . entryId + ' is complete' ) ;
}
kea-clip-created
Отправляется после создания клипа. Атрибут data
содержит исходный идентификатор записи, идентификатор нового клипа и имя новой записи. Ожидаемый ответ: kea-clip-message
, где message.data
— это (локализованный) текст, который будет отображаться пользователю после создания нового клипа.
if ( postMessageData . messageType === 'kea-clip-created' ) {
var message = 'A new video clip named "' + postMessageData . data . newEntryName + '" (id: ' + postMessageData . data . newEntryId + ') was created from ' + postMessageData . data . originalEntryId ;
e . source . postMessage ( {
'messageType' : 'kea-clip-message' ,
'data' : message
} , e . origin ) ;
}
kea-quiz-updated
Отправляется при обновлении записи викторины в видео. message.data
будет включать в себя идентификатор записи Kaltura, которая была обновлена.
if ( postMessageData . messageType === 'kea-quiz-updated' ) {
// do something (you can also ignore it), you can invalidate cache, etc..
}
kea-quiz-created
Отправляется при создании новой записи викторины в видео. message.data
будет включать в себя идентификатор созданной записи Kaltura.
if ( postMessageData . messageType === 'kea-quiz-created' ) {
// do something (you can also ignore it), you can invalidate cache, etc..
}
kea-get-display-name
Запрос на получение отображаемого имени пользователя для владельца загруженной записи. Атрибут data
содержит соответствующий идентификатор пользователя. Ожидаемый ответ: kea-display-name
, где message.data
— отображаемое имя пользователя, которое будет отображаться в приложении-редакторе.
if ( postMessageData . messageType === 'kea-get-display-name' ) {
//use the userId to get display name from your service
var getUserDisplaynameUrl = 'kedit-displayname-service/?userId=' + postMessageData . data . userId ;
$ . getJSON ( getKsUrl , null )
. done ( function ( responseData ) {
e . source . postMessage ( {
messageType : 'kea-display-name' ,
data : responseData . displayName
} , e . origin ) ;
} )
. fail ( function ( jqxhr , textStatus , error ) {
var err = textStatus + ", " + error ;
console . log ( "Failed to retrieve the user display name: " + err ) ;
e . source . postMessage ( {
messageType : 'kea-display-name' ,
data : postMessageData . data . userId
} , e . origin ) ;
} ) ;
}
kea-go-to-media
Получается, когда пользователь должен выйти за пределы приложения (например, закончил редактирование). Атрибут data
содержит идентификатор записи. Хост-приложение должно перейти на страницу, отображающую отредактированные медиафайлы.
if ( postMessageData . messageType === 'kea-go-to-media' ) {
console . log ( "Redirecting to the new media: " + postMessageData . data ) ;
var videoPath = "https://example.com/video/" ; //replace with your real service path for video playbacl pages
var redirectUrl = videoPath + "?entryId=" postMessageData . data ;
$ ( location ) . attr ( 'href' , redirectUrl ) ;
}
kea-{tab-name}-tab-loaded
Это сообщение будет вызвано, когда пользователь перейдет на другую вкладку в приложении-редакторе. Это полезно, когда хостинговое приложение должно быть более контекстным. Замените {tab-name}
названием интересующей вас вкладки.
Пример:
window . addEventListener ( 'message' , function ( e ) {
var postMessageData ;
try {
postMessageData = e . data ;
}
catch ( ex ) {
return ;
}
// make sure we are in editor tab.
if ( postMessageData . messageType === 'kea-editor-tab-loaded' ) {
// do stuff here after tab is loaded
}
} )
Поддерживаемые события:
kea-quiz-tab-loaded
kea-editor-tab-loaded
kea-advertisements-tab-loaded
kea-hotspots-tab-loaded
kea-do-save
Может быть отправлено хост-приложением, когда пользователь хочет открыть диалоговое окно « Сохранить» для пользователя и начать процесс сохранения (поддерживаемые вкладки: «Объявления», «Горячие точки» и «Редактор»). В Редакторе действие «Сохранить» соответствует операции «Обрезка».
Пример:
// listen to postMessages on the window
window . addEventListener ( 'message' , function ( e ) {
var postMessageData ;
try {
postMessageData = e . data ;
}
catch ( ex ) {
return ;
}
// make sure we are in editor tab.
if ( postMessageData . messageType === 'kea-editor-tab-loaded' ) {
// attach a click event to a button (id==saveButton) in the hosting app.
// when the button is clicked, call the editor app's save function
saveButton . addEventListener ( 'click' , function ( ) {
e . source . postMessage ( { messageType : 'kea-do-save' } , e . origin ) ;
} ) ;
}
} )
kea-do-save-as
Может быть отправлено хост-приложением, когда пользователь хочет открыть диалоговое окно « Сохранить как» для пользователя и начать процесс создания нового видеоклипа (поддерживаемая вкладка: «Редактор»). В Редакторе действие «Сохранить» соответствует операции «Вырезка». Это действие также позволяет передать идентификатор ссылки, который будет добавлен к клонированной записи как часть ответа.
Примечание. Для поддержки настройки поля referenceId сеанс Kaltura, используемый приложением-редактором, должен использовать роль пользователя со следующими включенными разрешениями:
BASE_USER_SESSION_PERMISSION,CONTENT_INGEST_REFERENCE_MODIFY,CONTENT_INGEST_CLIP_MEDIA
Пример:
// listen to postMessages on the window
window . addEventListener ( 'message' , function ( e ) {
var postMessageData ;
try {
postMessageData = e . data ;
}
catch ( ex ) {
return ;
}
// make sure we are in editor tab.
if ( postMessageData . messageType === 'kea-editor-tab-loaded' ) {
// Start the clipping process (will prompt user)
// And pass optional reference id param to keep reference to the external hosting app entry id.
// useful for cases where the hosting app was closed while clipping.
saveButton . addEventListener ( 'click' , function ( ) {
e . source . postMessage ( {
messageType : 'kea-do-save-as' ,
data : { referenceId : referenceId }
} , e . origin ) ;
} ) ;
}
} )
Вы можете узнать больше о Kaltura и начать бесплатную пробную версию на сайте: http://corp.kaltura.com.
Свяжитесь с нами через Twitter @Kaltura или по электронной почте: [email protected]
Мы хотели бы услышать ваше мнение!
Весь код в этом проекте выпущен под лицензией AGPLv3, если в соответствующем пути к библиотеке не указана другая лицензия для конкретной библиотеки.
Copyright © Kaltura Inc. Все права защищены.
Просмотрите список сторонних библиотек с открытым исходным кодом, используемых в этом проекте.