2012-02-28 4 views
4

Есть много примеров того, как использовать фоновый аудио агент, но очень мало показывают, как использовать фоновый аудиопоток и те, которые я нашел, не показывают потокового mp3, а вместо этого создают притворный поток.Как я могу передать MP3 через HTTP в фоновом режиме?

Когда я создаю новый проект Windows Phone Audio Streaming Агент, это дает мне:

public class AudioTrackStreamer : AudioStreamingAgent 
{ 
    /// <summary> 
    /// Called when a new track requires audio decoding 
    /// (typically because it is about to start playing) 
    /// </summary> 
    /// <param name="track"> 
    /// The track that needs audio streaming 
    /// </param> 
    /// <param name="streamer"> 
    /// The AudioStreamer object to which a MediaStreamSource should be 
    /// attached to commence playback 
    /// </param> 
    /// <remarks> 
    /// To invoke this method for a track set the Source parameter of the AudioTrack to null 
    /// before setting into the Track property of the BackgroundAudioPlayer instance 
    /// property set to true; 
    /// otherwise it is assumed that the system will perform all streaming 
    /// and decoding 
    /// </remarks> 
    protected override void OnBeginStreaming(AudioTrack track, AudioStreamer streamer) 
    { 
     //TODO: Set the SetSource property of streamer to a MSS source 

     NotifyComplete(); 
    } 

    /// <summary> 
    /// Called when the agent request is getting cancelled 
    /// The call to base.OnCancel() is necessary to release the background streaming resources 
    /// </summary> 
    protected override void OnCancel() 
    { 
     base.OnCancel(); 
    } 
} 

Как дать ему MP3 URL как http://relay.radioreference.com:80/346246215 и его поток в фоновом режиме? Также я ставлю BackgroundAudioPlayer.Instance.Play();, чтобы воспроизвести его и все?

ответ

6

Да, этого достаточно Нет необходимости в создании стримера, если вы установите URL-адрес фонового агента и вызовите функцию BackgroundAudioPlayer.Instance.Play(); фоновый агент автоматически передает поток

+0

Как установить URL-адрес? Где? –

+1

См. Эту ссылку http://msdn.microsoft.com/en-us/library/hh202978%28v=vs.92%29.aspx. В проекте «Фоновый аудио агент» в аудио-плейлисте AudioPlayer.cs добавьте новый трек. как указано ниже, новый AudioTrack (новый Uri («http://relay.radioreference.com:80/346246215», UriKind.RelativeorAbsolute), «AlbumName», «Исполнитель», «Ninja Tuna», Artpath); – Santhu

+0

Спасибо. Я посмотрю, будет ли это работать. –

3

У вас есть хороший пример AudioStreamingAgent on Github: https://github.com/loarabia/ManagedMediaHelpers.

Я уже пробовал, но работает только при поиске заголовка ID3 в потоке.

+0

Спасибо. Я уже пробовал этот пример, и они делают его не только слишком сложным для понимания, но и он не работает для меня. Я все равно проголосую, если это поможет кому-то другому. –

5

Если вы хотите воспроизвести потоковое аудио в format/codec which is not natively supported by the phone, вы должны сделать это с помощью AudioStreamingAgent. Если это поддерживаемый кодек, вы можете использовать AudioPlayerAgent (см. Образец here).

Использование AudioStreamingAgent является нетривиальной задачей и требует глубокого понимания кодека, который вам нужно воспроизвести, чтобы вы могли преобразовать его в то, что понимает телефон. Я знаю, был ли один человек, который сделал это, для потока H.264, и потребовалось много времени и много усилий, чтобы заставить его работать. И прежде чем кто-нибудь спросит: нет, они не могут поделиться кодом из этого проекта.

Если вы действительно должны идти по этому пути, то ManagedMediaHelpers (ранее here) является хорошим местом для начала, но да, они не охватывают все кодеки и это, возможно, очень сложное и не то, что хорошо задокументированы в Интернете.

0

Вы можете попробовать мое решение, просто немного настроить из фонового агента, чтобы установить новый трек из mainPage.

SetTrack from foreground

Вы также можете сохранить Треклист на Isostorage и читать от фонового агента, чтобы играть.

Смежные вопросы