problème de BackgroundAudioPlayer
-
mercredi 13 juin 2012 17:22
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
Toutes les réponses
-
vendredi 15 juin 2012 12:24Modérateur
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 SailleModerator samedi 16 juin 2012 09:17
- Marqué comme réponse Adi kolassiba dimanche 17 juin 2012 20:42
-
samedi 16 juin 2012 14:52
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) -
dimanche 17 juin 2012 20:41
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 Adi kolassiba dimanche 17 juin 2012 20:41
- Non marqué comme réponse rudyhuynMVP, Moderator lundi 18 juin 2012 09:31


