Search code examples
c#iosxamarin.iosavassetavplayeritem

Retrieving AVPlayerItem from Gallery Asset


I'm trying to play a video using the AVPlayer and an AVPlayerItem.

Im using following code:

asset = AVAsset.FromUrl(new NSUrl(GalleryURL));
playerItem = new AVPlayerItem(asset);
playerItem.AddObserver(this, (NSString)"status", NSKeyValueObservingOptions.OldNew, IntPtr.Zero);
player = new AVPlayer(playerItem);

the property GalleryURL is one of the following:

1.) When saving a video to the gallery, i get this url from the ALAssetsLibrary instance call: WriteVideoToSavedPhotosAlbum(url, (galleryPath, error) => { ... });

where "galleryPath" is something like this:

file:///var/mobile/Containers/Data/Application/0D510365-4A63-425B-840C-A4E18BD870A8/Documents/...

this works fine, I can create the AVAsset and retrieve the AVPlayerItemStatus, especially the status "ReadyToPlay", via the added Observer.

2.) However when I retrieve a Video from the gallery, the url looks different:

assets-library://asset/asset.MOV?id=EB9FC214...

and in this case I'm not able to retrieve a working AVAsset

How can I get part 2 to create a working AVAsset, which I can use for video playback? I believe this works in iOS versions prior to iOS 11.


Solution

  • Landu Lu - MSFT helped me to find the answer:

    He told me that there are 2 paths that I receive from the UIImagePickerController:

    The asset-library path could not be used, maybe I have to remove the "assets-library:" part? but the path beginning with "file://" could be used. The problem of the plugin was, that the start of the url was cut off, there was no "file://" at the beginning. I manually added this string and it works! Thanks alot!