Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
EF StartUp Manager - программа для слежением за программами, которые запускаются вместе с загрузкой операционной системы...
EF Mailbox Manager - программа для периодической проверки неограниченного количество аккаунтов электронной почты. Вы мож...
Программа позволяет узнать, чем занято место на жестком диске. Сканирует папки очень быстро и выводит наглядную диаграмм...
HashMyFiles - это маленькая утилита, которая предоставляет возможность рассчета контрольных сумм MD5 и SHA1 для одного и...
Файловый менеджер с очень малыми системными требованиями, но тем не менее с большими возможностями. Программа имеет ориг...
OSzone.net Microsoft Разработка приложений Windows Phone Создание медиа-приложений для Windows Phone RSS

Создание медиа-приложений для Windows Phone

Текущий рейтинг: 0 (проголосовало 0)
 Посетителей: 995 | Просмотров: 1222 (сегодня 0)  Шрифт: - +

Windows Phone — отличная платформа для воспроизведения медийной информации. Встроенный медиа-плеер и Windows Phone Marketplace — мои основные источники для прослушивания как музыки, так и любимых подкастов. Я слушаю их в тренажерном зале, в машине, в автобусе и даже собираясь утром на работу. Мне нравятся медиа-приложения, помогающие открывать такие материалы, о которых я иначе никогда не узнал бы. Например, я узнал о множестве новых музыкальных записей с помощью встроенной функции Smart DJ, а также различных приложений для потокового воспроизведения музыки. Несколько приложений обеспечивают мне доступ к видеоконтенту, предоставляемому YouTube и Vimeo.

Если вы заинтересованы в создании медиа-приложений для Windows Phone, вам нужно соединить ряд фрагментов в одно целое для интеграции с операционной системой. В частности, вам потребуется убедиться, что ваше приложение способно участвовать в работе Music + Videos Hub и вообще появляется в нем.

Интеграция с Music + Videos Hub

«Хабы» удобны для поиска пользователями своего контента. Music + Videos Hub — лучшее место для медийной информации на устройстве с Windows Phone. Там вы не только видите свой контент, но и получаете мгновенный доступ к наиболее подходящим вам медийным файлам. По результатам исследований, проведенных группой Windows Phone, мы узнали, что чаще всего хотят делать пользователи в отношении медийной информации:

  1. возобновлять воспроизведение с того места, где оно было остановлено;
  2. получать доступ к контенту, который они проигрывают чаще всего;
  3. видеть контент, который только что был добавлен в смартфон.

Music + Videos Hub помещает контент в эти три категории с выравниванием посередине, в то же время агрегируя медиа-приложения и локальную медиа-библиотеку в единое целое. На рис. 1 показана полное панорамное представление Music + Videos Hub в Windows Phone.

*
Рис. 1. Music + Videos Hub в Windows Phone

History ItemsЭлементы History
New ItemsЭлементы New
AppsПриложения

Помимо удобства для конечных пользователей, Music + Videos Hub обеспечивает немалые преимущества вашим приложениям. Он не требует никакой заблаговременной настройки, и ваш контент можно легко находить. Если ваше приложение воспроизводит музыкальный и видеоконтент, вы должны интегрировать его с Music + Videos Hub. Это важная часть удобной функциональности Window Phone.

Существует четыре основные точки интеграции, которыми вы можете воспользоваться в своем приложении для повышения удобства использования музыкального и видеоконтента.

  1. Заполнение секции Now Playing.
  2. Добавление элементов в списки New и History.
  3. Определение того, откуда было запущено ваше приложение — из элемента New или History.
  4. Интеграция в список Apps.

Заполнение секции Now Playing

Эта секция — наиболее выдающаяся функциональность в Music + Videos Hub, отображающая сравнительно крупные изображения любого контента, который воспроизводился последним или поставлен на паузу в данный момент. Касание этой секции либо возобновляет, либо запускает воспроизведение отображаемого контента. Предоставляя такое изображение, вы одновременно и рекламируете свой контент, и создаете дополнительную точку входа в функционал воспроизведения в своем приложении. Обновите элемент Now Playing заданием свойства MediaHistory.Instance.NowPlaying, как показано в следующем фрагменте кода (я использую C# в этой статье):

MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
// <hubTileImageStream> должен быть допустимым ImageStream
mediaHistoryItem.ImageStream = <hubTileImageStream>;
mediaHistoryItem.Source = "";
mediaHistoryItem.Title = "NowPlaying";
mediaHistoryItem.PlayerContext.Add("keyString", "Song Name");
MediaHistory.Instance.NowPlaying = mediaHistoryItem;

Добавление элементов в History

Контент, который воспроизводился последним на смартфоне, может быть показан в секции History вызовом метода MediaHistory.Instance.Write¬RecentPlay. Как и Now Playing, секции History отображают картинки, и касанием этих картинок можно запускать воспроизведение связанного с ними контента. Вот как обновляется список History:

MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
// <hubTileImageStream> должен быть допустимым ImageStream
mediaHistoryItem.ImageStream = <hubTileImageStream>;
mediaHistoryItem.Source = "";
mediaHistoryItem.Title = "RecentPlay";
mediaHistoryItem.PlayerContext.Add("keyString", "Song Name");
MediaHistory.Instance.WriteRecentPlay(mediaHistoryItem);

Добавление элементов в New

Секции New функционируют так же, как и секции History, но отображают контент, недавно добавленный в смартфон. Скажем, в секции New может сообщаться о только что скачанном музыкальном файле. Однако эти секции можно использовать и для других вещей вроде недавно созданных радиостанциях или списков воспроизведения. Здесь применимо то же действие касания секции, инициирующее проигрывание. Следующий код демонстрирует, как обновить список New:

MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
// <hubTileImageStream> должен быть допустимым ImageStream
mediaHistoryItem.ImageStream = <hubTileImageStream>;
mediaHistoryItem.Source = "";
mediaHistoryItem.Title = "MediaHistoryNew";
mediaHistoryItem.PlayerContext.Add("keyString", "Song Name");
MediaHistory.Instance.WriteAcquiredItem(mediaHistoryItem);

Определение того, как было запущено ваше приложение

Секции History и New следует использовать только для воспроизведения и не превращать их в универсальные точки запуска вашего приложения. Вполне нормально, если ваше приложение запускается и отображает свой UI. Но важно, чтобы воспроизведение музыки или видео начиналось одним касанием для согласования с UI самой системы.

Чтобы определить, откуда было запущено ваше приложение — из секции History или New, начните с переопределения виртуального метода OnNavigatedTo. Для определения медийного контента, сопоставленного с элементом (в данном случае песни их медиа-библиотеки на устройстве), используется NavigationContext. Проигрывание песни начинается в обработчике события Loaded для PhoneApplicationPage после того, как загрузка данной страницы завершилась. Если вас интересуют подробности, скачайте Music + Videos Hub Sample из MSDN Library по ссылке bit.ly/y0tEiX.

В коде на рис. 2 показано, как определить, из какого элемента было запущено приложение — в списке History или New.

Рис. 2. Определение элемента, из которого было запущено приложение

// Указывает, было ли приложение запущено из MediaHistoryItem
bool _historyItemLaunch = false;
// Ключ для пары "ключ-значение" в MediaHistoryItem
const String _playSongKey = "keyString";
// Песня, которую нужно воспроизвести
Song _playingSong = null;
protected override void OnNavigatedTo(System.Windows.
  Navigation.NavigationEventArgs e)
{
  MediaLibrary library = new MediaLibrary();
  if (NavigationContext.QueryString.ContainsKey(_playSongKey))
  {
    // Приложение запущено из элемента в History.
    // Изменяем _playingSong, даже если что-то уже
    // воспроизводится, так как пользователя напрямую
    // выбрал песню из списка History
    // Ищем песню по названию, используя контекст навигации
    String songToPlay = NavigationContext.QueryString[_playSongKey];
    foreach (Song song in library.Songs)
    {
      if (0 == String.Compare(songToPlay, song.Name))
      {
        _playingSong = song;
        break;
      }
    }
    // Устанавливаем флаг, указывающий, что приложение было
    // запущено из какого-то элемента в History и что
    // воспроизведение песни следует начать сразу
    // по окончании загрузки UI
    _historyItemLaunch = true;
  }
}
private void PhoneApplicationPage_Loaded(object sender,
  RoutedEventArgs e)
{
  if (_historyItemLaunch)
  {
    // Приложение запущено из элемента в History,
    // начинаем проигрывать песню
    if (_playingSong != null)
    {
      MediaPlayer.Play(_playingSong);
    }
  }
}

Интеграция со страницей Apps

Если ваше приложение вызывает один или более из упомянутых выше API, оно автоматически появляется в списке Apps в Hub — в дополнение к главному списку приложений. Это упрощает поиск приложения и доступ к нему и делает его частью базовой медиа-среды. Такая автоматическая интеграция происходит, когда процесс сертификации и передачи App Hub обнаруживает, что ваше приложение вызывает MediaHistory и MediaHistoryItem; далее манифест приложения изменяется так, чтобы он отражал тот факт, что это медиа-приложение, и с этой целью задается атрибут HubType. Вы можете сделать это сами еще до передачи (исключительно для тестирования), изменив элемент <App> в файле WMAppManifest.xml своего проекта Windows Phone:

<App xmlns="" ... HubType="1">

В этом случае ваша программа появится в списке Apps и в процессе тестирования. Заметьте, что процесс передачи AppHub (submission process) перед публикацией перезапишет этот файл на основе тех API, которые вызываются в приложении.

Требования к графическим файлам

Поскольку Music + Videos Hub ориентирован на контент, объем данных, вносимых каждым приложением, зависит от частоты его использования: чем чаще оно используется, тем больше будет выделяться ваш контент. Для клиентов, регулярно запускающих ваше приложение, Music + Videos Hub станет заполняться вашим контентом, что дает отличную возможность рекламы.

Так как Music + Videos Hub агрегирует контент из множества разных источников, важно продумать дизайн секций, чтобы ваше приложение можно было отличить от других. Например, учитывайте, что пользователю в одном и том же списке будут показываться универсальные обложки для реальных альбомов. А скажем, радиостанция, просто проигрывающая какую-то песню из альбома, должна отображаться в секции, визуально отличной от обложки альбома, которая показывается при воспроизведении той же песни из медиа-библиотеки. Подумайте об использовании секций, где отображались бы ваши информация и графика для контента.

Секции, показываемые в Music + Videos Hub, должны соответствовать следующим требованиям:

  • вы должны включать в каждую секцию название или эмблему своего приложения;
  • размер секции Now Playing должен быть 358 × 358 пикселей, а размер файл не должен превышать 75 Кб;
  • размеры остальных секций должны быть 173 × 173 пикселей;
  • свойство Title класса MediaHistoryItem должно содержать текст, представляющий контент, например название радиостанции или видеоролика.

Чтобы не путать пользователей, секции не должны содержать изображения обложки альбома, если только этот альбом не воспроизводится при нажатии данной секции. Если ваше приложение воспроизводит потоковые данные, графика секции должна описывать этот поток. Это не является требованием сертификации, но считается хорошим стилем.

Воспроизведение медиа-файлов

При создании приложения XNA Framework или Silverlight воспроизведение видео осуществляется схожим образом. В приложении XNA Framework применяется класс MediaPlayerLauncher, запускающий медиа-плеер Windows Phone при вызове MediaPlayerLauncher.Show. В Silverlight используется MediaElement API, обеспечивающий более широкие возможности в настройке, например внешнего вида и размещения элементов управления, но в конечном счете видео воспроизводится с помощью того же медиа-плеера Windows Phone. В случае аудиозаписей дело обстоит немного интереснее.

MediaElement в сравнении с SoundEffect

В приложении XNA Framework для воспроизведения аудио применяется класс SoundEffect (либо связанные классы — SoundEffectInstance или DynamicSoundEffectInstance). Эти классы поддерживают воспроизведение только источников в формате WAV. Однако вы получаете больший контроль над процессом воспроизведения и можете использовать некоторые полезные функции, например у вас появляется возможность проигрывать до 16 звуков одновременно и микшировать их на выходе.

В приложении Silverlight можно использовать класс MediaElement для проигрывания аудио в дополнение к видео. MediaElement поддерживает воспроизведение источников в форматах WAV, WMA, MP3 и др. Полный список аудиоформатов, поддерживаемые в Windows Phone, см. в Supported Media Codecs for Windows Phone (bit.ly/aflZrb). MediaElement позволяет проигрывать одновременно только один звук. Если другой звук уже воспроизводится, MediaElement обрывает его, как только вы инициируете воспроизведение нового звука.

Silverlight также позволяет проигрывать аудио через класс SoundEffect. Чтобы задействовать XNA Framework API в приложении Silverlight, вы должны имитировать цикл Game, который существует в приложениях XNA Framework. Для этого я обычно создаю метод с именем StartGameLoop, который устанавливает GameTimer. Этот метод я вызываю из конструктора своего производного класса PhoneApplicationPage (рис. 3). GameTimer — новый класс, доступный в Windows Phone 7.1 SDK и упрощающий интеграцию Silverlight и XNA Framework.

Рис. 3. Мой Silverlight-метод StartGameLoop имитирует цикл Game из XNA Framework

// Конструктор
public MainPage()
{
  InitializeComponent();
   StartGameLoop();
}
private void StartGameLoop()
{
  // Таймер, имитирующий игровой цикл XNA
  // (класс SoundEffect из XNA Framework)
  GameTimer gameTimer = new GameTimer();
  gameTimer.UpdateInterval = TimeSpan.FromMilliseconds(33);
  // Вызов FrameworkDispatcher.Update для обновления
  // внутренних структур XNA Framework
  gameTimer.Update += delegate { try
    { FrameworkDispatcher.Update(); } catch { } };
  // Запуск GameTimer
  gameTimer.Start();
  // Запустите цикл, а иначе вы получите исключение
  // при первом же вызове XNA Framework
  FrameworkDispatcher.Update();
}

После реализации этого цикла по таймеру можно вызывать XNA Framework API из любой точки производного класса PhoneApplicationPage.

Сертификация для Marketplace

Если приложение вызывает класс MediaHistory или MediaHistoryItem, оно считается программой Music + Videos Hub и будет появляться в списке Apps при установке на смартфон. Процессе передачи распознает использование данных классов и автоматически обновляет тип «хаба» до Music + Videos в файле манифеста вашего приложения Windows Phone.

Чтобы ваше приложение было принято в Marketplace, следует соблюсти несколько требований сертификации, касающихся воспроизведения медиа-файлов. На момент написания этой статьи данные требования были документированы в «Application Certification Requirements for Windows Phone», разделы 6.4 и 6.5 (bit.ly/kN6N7Z). Требования сертификации регулярно обновляются, поэтому первым делом всегда проверяйте, что вы располагаете самой последней версией этого документа.

Требования сертификации диктуют недопустимость прерывания музыки, которую слушал пользователь на момент запуска вашего приложения. Это имеет смысл, так как пользователь, например, мог наслаждаться прослушиванием любимой музыки, попутно играя в какую-то игру. По поводу этой конкретной ситуации все сказано в разделах 6.5.1 и 6.5.2.

Дополнительный интерес представляет раздел 6.5.3, где утверждается, что:

  • приложение может прерывать проигрываемую в данный момент музыку для воспроизведения неинтерактивного полнокадрового видео или неинтерактивного аудиосегмента (например, внутриигрового или медиа-клипа) без согласия пользователя;
  • приложение должно возобновлять музыку, которая проигрывалась до прерывания, как только это приложение закрывается.

Итак, каким образом приостанавливается и возобновляется воспроизведение музыки, которую слушал пользователь? Если вы создаете приложение Silverlight, вам потребуется имитация цикла Game, как описывалось ранее.

Я поэкспериментировал с прерыванием текущей проигрываемой аудиозаписи своим звуковым эффектом и последующим немедленным возобновлением воспроизведения аудиозаписи. Это создавало дисгармонию, режущую ухо, и на деле портило все впечатление от моего звукового эффекта. В итоге я понял, что лучше всего приостанавливать воспроизведение текущей аудиозаписи, когда пользователь переходит на мою страницу, а затем возобновлять его, когда он уходит с этой страницы. Я добился этого переопределением методов OnNavigatedTo и OnNavigatedFrom. Внутри переопределений этих методов я вызываю вспомогательные функции для приостановки и возобновления воспроизведения аудиозаписи, как показано на рис. 4.

Рис. 4. Переопределение методов OnNavigatedTo и OnNavigatedFrom для приостановки воспроизведения аудиозаписи

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  // Если MediaPlayer уже проигрывает музыку,
  // ставим ее на паузу при входе в приложение
  PauseMediaPlayer();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
  // Если MediaPlayer ранее проигрывал музыку, возобновляем
  // воспроизведение, когда пользователь покидает приложение
  ResumeMediaPlayer();
}
private void PauseMediaPlayer()
{
  // См. конструктор MainPage ранее в этой статье, где
  // создавался объект GameTimer. Это позволяет использовать
  // класс MediaPlayer из XNA Framework за счет
  // прокачки данных в XNA FrameworkDispatcher.

  // Ставим медиа-плеер на паузу, если он проигрывает музыку
  if (!MediaPlayer.GameHasControl)
  {
    MediaPlayer.Pause();
    resumeMediaPlayerAfterDone = true;
  }
}
private void ResumeMediaPlayer()
{
  // Если музыка играла, возобновляем воспроизведение
  if (resumeMediaPlayerAfterDone)
  {
    MediaPlayer.Resume();
  }
}

Заключение

Создавая медиа-приложения для Windows Phone, продумывайте несколько вещей в дополнение к низкоуровневым деталям обработки самой медийной информации.

Убедитесь в интеграции с Music + Videos Hub, чтобы вашим приложением можно было пользоваться так, как этого ожидают пользователи ото всех медиа-приложений. Это означает, что вы должны заполнять секции History и New своим контентом и проверять, что ваша программа появляется в списке Apps.

Прочтите требования сертификации к медиа-приложениям, чтобы повысить шансы на прохождение вашего приложения через процесс передачи в Windows Phone Marketplace.

Соблюдая эти правила, вы гарантированно добьетесь беспроблемного взаимодействия пользователей с вашим приложением. Вы также повысите заметность своего приложения и контента, убедившись, что они появляются в соответствующих областях Music + Videos Hub. И ваше приложение станет «сознательным гражданином» в Windows Phone.

Автор: Марк Хопкинс  •  Иcточник: MSDN Magazine  •  Опубликована: 02.11.2012
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:   Windows Phone.


Оценить статью:
Вверх
Комментарии посетителей RSS

Чтобы оставить комментарий, зарегистрируйтесь или войдите с учетной записью социальной сети.