Использование системных элементов управления транспортировкой мультимедиа (HTML)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. В случае разработки приложений для Windows 10 см. раздел последняя документация]
Класс SystemMediaTransportControls позволяет использовать в приложении системные элементы управления транспортировкой мультимедиа, предоставляемые Windows, и обновлять отображаемые сведения о мультимедиа.
Посмотрите, как работает эта функция в полном примере воспроизведения мультимедиа: Воспроизведение медиа, от начала и до конца.
Введение
Класс SystemMediaTransportControls появился в Windows 8.1 и заменяет старый класс MediaControl. Следует использовать новый класс SystemMediaTransportControls вместо MediaControl.
Системные элементы управления транспортировкой отличаются от тех же элементов в объектах audio или video. Системные элементы управления открываются при нажатии клавиши на мультимедийном оборудовании (регулировка громкости на наушниках или клавиши мультимедиа на клавиатуре). Если пользователь нажимает клавишу ПАУЗА на клавиатуре и ваше приложение поддерживает SystemMediaTransportControls, приложение получает уведомление и может выполнить соответствующее действие.
Приложение также может обновлять сведения о мультимедиа, в том числе название композиции и эскиз, отображаемые классом SystemMediaTransportControls.
Настройка элементов управления транспортировкой
Чтобы получить экземпляр класса SystemMediaTransportControls, вызовите getForCurrentView.
Чтобы включить кнопки, которые будут работать в приложении, установите соответствующее свойство "is enabled", например isPlayEnabled, isPauseEnabled, isNextEnabled и isPreviousEnabled, в объекте SystemMediaTransportControls. Полный список см. в справочной документации SystemMediaTransportControls.
Вот код, в котором создается объект video с обработчиком для событий paused, playing и ended и настраивается SystemMediaTransportControls. В коде включаются кнопки воспроизведения и приостановки, добавляется обработчик для события buttonpressed. Обработчики событий paused, playing и ended показаны далее в этом примере.
<video id="mediaVideo"
controls
src="https://www.contoso.com/clip.mp4"
onpause="mediaPaused(event)"
onplaying="mediaPlaying(event)"
onended="mediaEnded(event)" />
var systemMediaControls;
systemMediaControls = Windows.Media.SystemMediaTransportControls.getForCurrentView();
systemMediaControls.addEventListener("buttonpressed", systemMediaControlsButtonPressed, false);
systemMediaControls.isPlayEnabled = true;
systemMediaControls.isPauseEnabled = true;
systemMediaControls.isStopEnabled = true;
systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.closed;
Обмен данными с элементами управления транспортировкой
В работе элементов управления транспортировкой можно отметить три аспекта обмена данными.
Когда нажимается одна из включенных кнопок, объект SystemMediaTransportControls уведомляет приложение посредством события buttonpressed. Затем, в зависимости от того, какая кнопка нажата, приложение может выполнить операцию с объектом мультимедиа (например, приостановить или возобновить воспроизведение).
Когда состояние объекта мультимедиа меняется, приложение уведомляет объект SystemMediaTransportControls, используя свойство SystemMediaTransportControls.playbackStatus. Таким образом элементы управления транспортировкой могут обновлять состояние кнопок в соответствии с состоянием источника мультимедиа.
С помощью SystemMediaTransportControlsDisplayUpdater вы можете обновлять сведения о мультимедиа, которые отображаются элементами управления транспортировкой (название композиции, обложка альбома и т. п.).
Обработка нажатия кнопок
Когда нажимается одна из включенных кнопок, системные элементы управления транспортировкой вызывают событие buttonpressed. По аргументам события для свойства button определяется, какая кнопка была нажата.
Вот код, в котором создаются обработчик событий buttonpressed и вспомогательные методы для воспроизведения и приостановки video.
// Event handler for SystemMediaTransportControls' buttonpressed event
function systemMediaControlsButtonPressed(eventIn) {
var mediaButton = Windows.Media.SystemMediaTransportControlsButton;
switch (eventIn.button) {
case mediaButton.play:
playMedia();
break;
case mediaButton.pause:
pauseMedia();
break;
case mediaButton.stop:
stopMedia();
break;
// Insert additional case statements for other buttons you want to handle
}
}
// Plays the media.
function playMedia() {
var media = document.getElementById("mediaVideo");
media.play();
}
// Pauses the media.
function pauseMedia() {
var media = document.getElementById("mediaVideo");
media.pause();
}
// Stops the media.
function stopMedia() {
var media = document.getElementById("mediaVideo");
media.pause();
media.currentTime = 0;
}
Обновление состояния мультимедиа
Чтобы уведомить SystemMediaTransportControls об изменении состояния мультимедиа, установите для свойства playbackStatus соответствующее значение MediaPlaybackStatus.
Вот код, обрабатывающий события мультимедиа и обновляющий свойство playbackStatus элемента SystemMediaTransportControls.
// The media Play event handler.
function mediaPlaying() {
// Update the SystemMediaTransportControl state.
systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.playing;
}
// The media Pause event handler.
function mediaPaused() {
// Update the SystemMediaTransportControl state.
systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.paused;
}
// The media Ended event handler.
function mediaEnded() {
// Update the SystemMediaTransportControl state.
systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.stopped;
}
Обновление эскиза и данных о мультимедиа
Класс SystemMediaTransportControlsDisplayUpdater позволяет обновлять сведения о мультимедиа, которые отображаются элементами управления транспортировкой (название композиции, обложка альбома и т. п.).
Свойство displayUpdater — это свойство SystemMediaTransportControlsDisplayUpdater, связанное с элементами SystemMediaTransportControls.
Вы можете обновить метаданные вручную, установив для свойства мультимедиа значение musicProperties, imageProperties или videoProperties, но намного проще передать файл мультимедиа в метод copyFromFileAsync, который автоматически извлекает метаданные и эскиз из файла.
После задания всех отображаемых данных о мультимедиа вызовите метод update. Пользовательский интерфейс не обновляется до вызова update.
Windows.Storage.StorageFile и Windows.Storage.Streams.RandomAccessStreamReference предоставляют полезные статические методы для работы с данными о мультимедиа.
Windows: фоновый звук
Чтобы воспроизводить в Windows звуки в фоновом режиме, в приложении необходимо включить кнопки воспроизведения и приостановки, установив для свойств isPlayEnabled и isPauseEnabled значение true. Кроме того, приложение должно обрабатывать событие buttonpressed. Дополнительные сведения обо всех требованиях к воспроизведению звука в фоновом режиме в Windows см. в разделе Как воспроизводить звук в фоновом режиме.