locked
problème de BackgroundAudioPlayer‏ RRS feed

  • Question

  • J'ai un probleme depour mon app.
    Mon app fait la lecture d'une radio web en streaming. j'ai lu tous les toutoriel, mais je n'arrive toujours pas à activer le BackgroundAudioPlayer à la lecture du streaming. Quand je fais play, le stream fonctionne et je n'ai pas le  BackgroundAudioPlayer Quand je fais stop j'ai ce message :


    L'exception System.InvalidOperationException n'a pas été gérée
    Message=The background audio resources are no longer available.
    StackTrace:
    at Microsoft.Phone.BackgroundAudio.BackgroundAudioPlayer.get_PlayerState()
    at OtoradioApp.MainPage.Bgap()
    at OtoradioApp.MainPage.image1_Tap(Object sender, GestureEventArgs e)
    at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)
    InnerException: System.Runtime.InteropServices.COMException
    Message=0x803a00d1
    ErrorCode=-2143682351
    StackTrace:
    at Microsoft.Phone.BackgroundAudio.BackgroundAudioPlayer.get_PlayerState()
    at OtoradioApp.MainPage.Bgap()
    at OtoradioApp.MainPage.image1_Tap(Object sender, GestureEventArgs e)
    at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

    Dans mon MainPage.xaml.cs
    j'ai :

    private void image1_Tap(object sender, GestureEventArgs e)

            {

             

                // activer la lecture du mediaelement

                Play();

                // Intégré le backgroundagent

                Bgap();

               

            }

     private void Play()

            {

                if (mediaElement == null || mediaElement.CurrentState != MediaElementState.Playing)

                {

                    if (SystemTray.ProgressIndicator == null)

                        SystemTray.ProgressIndicator = new ProgressIndicator();

                    SystemTray.ProgressIndicator.IsIndeterminate = true;

                    SystemTray.ProgressIndicator.IsVisible = true;

                    SystemTray.ProgressIndicator.Text = "Connection en cours...";

                    mediaStream = new Haplois.RadioStream(uri);

                    stop_image();

                   

                    mediaStream.StreamSetupComplete += (o, e) =>

                    {

                        Dispatcher.BeginInvoke(() =>

                        {

                            if (mediaElement != null)

                            {

                                LayoutRoot.Children.Remove(mediaElement);

                            }

                            mediaElement = new MediaElement();

                            mediaElement.Volume = 0.35;

                            LayoutRoot.Children.Add(mediaElement);

                            // Emplacement de la future implémentation du titre de la musique en cours

                            textBlock2.Text = mediaStream.StationName;

                            mediaElement.SetSource(mediaStream);

                          

                            SystemTray.ProgressIndicator.IsVisible = false;

                           

                           

                        });

                    };

                   

                }

                else

                {

                    // Arret de la lecture du flux

                    mediaElement.Stop();

                    play_image();

                    textBlock2.Text = null;

             

                }

            }

     private void Bgap()

            {

               

                if (PlayState.Playing == BackgroundAudioPlayer.Instance.PlayerState)

                {

                    BackgroundAudioPlayer.Instance.Pause();

                }

                else

                {

                    BackgroundAudioPlayer.Instance.Play();

                }

            }

    Dans audioStreamer.cs

    public const string uri = @"http://srv2.streaming-ingenierie.fr:8160";

            public Haplois.RadioStream mediaStream;

            protected override void OnBeginStreaming(AudioTrack track, AudioStreamer streamer)

            {

                //TODO: réglez la propriété SetSource du gestionnaire de flux sur une source MSS

                var bits = track.Tag.Split('|');

                mediaStream = new RadioStream(uri);

                if (bits.Length > 1 || mediaStream.ContinueStreaming == true)

                {

                 streamer.SetSource(mediaStream);

                }

                        

               

            }

    et Dans audioPlayer.cs

    private static readonly AudioTrack Track =new AudioTrack(null, "otoradio", null, null, null, null, EnabledPlayerControls.Pause);



    comment faire ?


    Adi

    mercredi 13 juin 2012 17:22

Réponses

  • Tu mélanges mediaelement et background audio agent, ce qui n'est pas bien du tout. Si tu fais le choix d'utiliser un background audio agent, il ne faut pas utiliser de mediaelement

    Tu as un sample ici 

    http://go.microsoft.com/fwlink/?LinkId=219073


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Proposé comme réponse Pascal Saille samedi 16 juin 2012 09:17
    • Marqué comme réponse markus155 dimanche 17 juin 2012 20:42
    vendredi 15 juin 2012 12:24

Toutes les réponses

  • Tu mélanges mediaelement et background audio agent, ce qui n'est pas bien du tout. Si tu fais le choix d'utiliser un background audio agent, il ne faut pas utiliser de mediaelement

    Tu as un sample ici 

    http://go.microsoft.com/fwlink/?LinkId=219073


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Proposé comme réponse Pascal Saille samedi 16 juin 2012 09:17
    • Marqué comme réponse markus155 dimanche 17 juin 2012 20:42
    vendredi 15 juin 2012 12:24
  • Merci de ta réponse.

    J'ai suivie ton conseil, d'où :

    dans le MainPagexaml.cs:

    private void image1_Tap(object sender, GestureEventArgs e)
            {

                if (PlayState.Playing == BackgroundAudioPlayer.Instance.PlayerState)
                {
                    BackgroundAudioPlayer.Instance.Pause();
                }
                else
                {
                    BackgroundAudioPlayer.Instance.Play();
                }
            }

    et dans le AudioStreamer.cs :

                                     

     public const string uri = @"http://srv2.streaming-ingenierie.fr:8160";
            public Haplois.RadioStream mediaStream;

            protected override void OnBeginStreaming(AudioTrack track, AudioStreamer streamer)
            {
                //TODO: réglez la propriété SetSource du gestionnaire de flux sur une source MSS

                mediaStream = new RadioStream(uri);
                if (mediaStream.BitRate >0 ||mediaStream.ContinueStreaming == true)
                {
                 streamer.SetSource(mediaStream);
                }


            }

    et j'ai ce message d'erreur :

    L'exception System.NullReferenceException n'a pas été gérée

      Message=NullReferenceException

      StackTrace:
           at Haplois.RadioStream.OpenMediaAsync()
           at System.Windows.Media.MediaStreamSource.OpenMedia()
           at System.Windows.Controls.MediaElement._OpenMedia(IntPtr nativeTarget)
           at MS.Internal.XcpImports.MediaElement_SetMediaStreamSourceNative(IntPtr mediaElement)
           at MS.Internal.XcpImports.MediaElement_SetMediaStreamSource(MediaElement mediaElement)
           at System.Windows.Controls.MediaElement.SetSource(MediaStreamSource mediaStreamSource)
           at Microsoft.Phone.BackgroundAudio.AudioStreamer.SetSource(MediaStreamSource source)
           at Microsoft.Phone.BackgroundAudio.AudioStreamer.<>c__DisplayClass2.<SetSource>b__0(Object )
           at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
           at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
           at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
           at System.Delegate.DynamicInvokeOne(Object[] args)
           at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
           at System.Delegate.DynamicInvoke(Object[] args)
           at System.Windows.Threading.Dispatcher.<>c__DisplayClass1.<Invoke>b__0()
           at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
           at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
           at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
           at System.Delegate.DynamicInvokeOne(Object[] args)
           at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
           at System.Delegate.DynamicInvoke(Object[] args)
           at System.Windows.Threading.DispatcherOperation.Invoke()
           at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
           at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
           at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
           at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
           at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

    samedi 16 juin 2012 14:52
  • Bonjour,

    j'ai mofifier aussi AudioStreamer.cs :

            public const string uri = @"http://srv2.streaming-ingenierie.fr:8160";
            public Haplois.RadioStream mediaStream;

            protected override void OnBeginStreaming(AudioTrack track, AudioStreamer streamer)
            {
                //TODO: réglez la propriété SetSource du gestionnaire de flux sur une source MSS

                if(track!=null)
                {
                    mediaStream = new RadioStream(uri);
                    mediaStream.StreamSetupComplete += (o, e) =>
                    {
                        if (mediaStream.ContinueStreaming)
                        {
                            streamer.SetSource(mediaStream);
                        }
                    }; 
                }
            }

    et tout fonctionne!!

    • Marqué comme réponse markus155 dimanche 17 juin 2012 20:41
    • Non marqué comme réponse rudyhuynMVP lundi 18 juin 2012 09:31
    dimanche 17 juin 2012 20:41