inthehand / InTheHand.Forms

Extras for Xamarin Forms including MediaElement

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

setDataSource Failed Android with header

JohnGalt1717 opened this issue · comments

I have videos inside Azure Media services. They require a Bearer Token be passed with a header for Android (iOS is a different mess but works fine).

So I am doing the following using your video player:

` if (Media.HttpHeaders.Any(h => h.Key == "Authorization"))
Media.HttpHeaders.Remove("Authorization");

                    Media.HttpHeaders.Add("Authorization", $"Bearer {token}");
                    Media.Source = new Uri(video.StreamingUri + "(format=m3u8-aapl)");
                    Media.Play();

`

Where the Uri is:
https://cadproductionmedia.streaming.mediaservices.windows.net/db90c76a-2d22-4dd1-b8eb-1d2e85fe5a3e/680716.acad17c0001t0001.ism/manifest(format=m3u8-aapl)

The token is a JWT token.

This similar code worked fine with Xamarin's MediaManager stuff but it's a mess and largely unsupported so I was hoping to use yours which appears to be much better.

But it fails with above error on the Media.Source = line.

Any ideas what I'm doing wrong?

Here's the full stack:

"Java.Lang.RuntimeException: setDataSource failed: status = 0x80000000\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <657aa8fea4454dc898a9e5f379c58734>:0 \n at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <54816278eed9488eb28d3597fecd78f8>:0 \n at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <54816278eed9488eb28d3597fecd78f8>:0 \n at Android.Media.MediaMetadataRetriever.SetDataSource (System.String uri, System.Collections.Generic.IDictionary2[TKey,TValue] headers) [0x00043] in <28e323a707a2414f8b493f6d4bb27c8d>:0 \n at InTheHand.Forms.Platform.Android.VideoViewEx.GetMetaData (Android.Net.Uri uri, System.Collections.Generic.IDictionary2[TKey,TValue] headers) [0x00023] in C:\Users\Peter
\Source\Repos\InTheHand.Forms\InTheHand.Forms\InTheHand.Forms.Platform.Android\VideoView.cs:71 \n at InTheHand.Forms.Platform.Android.VideoViewEx.SetVideoURI (Android.Net.Uri uri, System.Collections.Generic.IDictionary`2[TKey,TValue] headers) [0x00000] in C:\Users\Peter\Source\Repos\InTheHand.Forms\InTheHand.Forms\InTheHand.Forms.Platform.Android\VideoView.cs:55 \n at InTheHand.Forms.Platform.Android.MediaElementRenderer.UpdateSource () [0x00142] in C:\Users\Peter\Source\Repos\InTheHand.Forms\InTheHand.Forms\InTheHand.Forms.Platform.Android\MediaElementRenderer.cs:154 \n at InTheHand.Forms.Platform.Android.MediaElementRenderer.OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x00084] in C:\Users\Peter\Source\Repos\InTheHand.Forms\InTheHand.Forms\InTheHand.Forms.Platform.Android\MediaElementRenderer.cs:176 \n at (wrapper delegate-invoke) :invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyC
hangedEventArgs)\n at Xamarin.Forms.BindableObject.OnPropertyChanged (System.String propertyName) [0x0000a] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:138 \n at Xamarin.Forms.Element.OnPropertyChanged (System.String propertyName) [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Core\Element.cs:401 \n at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindableObject+BindablePropertyContext context, System.Object value, System.Boolean currentlyApplying, Xamarin.Forms.Internals.SetValueFlags attributes, System.Boolean silent) [0x00107] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:594 \n at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.Internals.SetValueFlags attributes, Xamarin.Forms.BindableObject+SetValuePrivateFlags privateAttributes) [0x0015b] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:391 \n at Xamarin.Forms.Bindab
leObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value, System.Boolean fromStyle, System.Boolean checkAccess) [0x0005f] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:544 \n at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value) [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:84 \n at InTheHand.Forms.MediaElement.set_Source (System.Uri value) [0x00000] in C:\Users\Peter\Source\Repos\InTheHand.Forms\InTheHand.Forms\MediaElement.cs:192 \n at Mobile.Views.LessonPage+d__15.MoveNext () [0x00d06] in D:\Repos\CADLearning\Mobile\CADLearning.Mobile\Views\LessonPage.xaml.cs:241 \n --- End of managed Java.Lang.RuntimeException stack trace ---\njava.lang.RuntimeException: setDataSource failed: status = 0x80000000\n\tat android.media.MediaMetadataRetriever._setDataSource(Native Method)\n\tat android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.
java:97)\n\tat mono.java.lang.RunnableImplementor.n_run(Native Method)\n\tat mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)\n\tat android.os.Handler.handleCallback(Handler.java:789)\n\tat android.os.Handler.dispatchMessage(Handler.java:98)\n\tat android.os.Looper.loop(Looper.java:164)\n\tat android.app.ActivityThread.main(ActivityThread.java:6541)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)\n"

Can you please re-test with the latest version and see if this is still an issue