Baseflow / ExoPlayerXamarin

Xamarin bindings library for the Google ExoPlayer library

Home Page:https://baseflow.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Question] Current sample code is "Obsolete"

badstorm opened this issue · comments

Hi,
i try to implement ExoPlayer on my Xamarin App using this code:

SimpleExoPlayer _player;
    var mediaUri = Android.Net.Uri.Parse("https://ia800806.us.archive.org/15/items/Mp3Playlist_555/AaronNeville-CrazyLove.mp3");

    var userAgent = Util.GetUserAgent(context, "ExoPlayerDemo");
    var defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent);
    var defaultDataSourceFactory = new DefaultDataSourceFactory(context, null, defaultHttpDataSourceFactory);
    var extractorMediaSource = new ExtractorMediaSource(mediaUri, defaultDataSourceFactory, new DefaultExtractorsFactory(), null, null);
    var defaultBandwidthMeter = new DefaultBandwidthMeter();
    var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(defaultBandwidthMeter);
    var defaultTrackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);

    _player = ExoPlayerFactory.NewSimpleInstance(context, defaultTrackSelector);
    _player.Prepare(extractorMediaSource);
    _player.PlayWhenReady = true;

But i get warning about "obsolete" methods.
I try to follow the official "hello world" example but I can find any reference to the MediaItem object.
Where I can find a simple updated hello world for xamarin?
Thanks

commented

Hi. You can prepare player like this:

PlayerView playerView = FindViewById<PlayerView>(Resource.Id.TVPlayer); //you must supply your own Id here  
SimpleExoPlayer player;
DefaultTrackSelector trackSelector = new DefaultTrackSelector(this);
trackSelector.SetParameters(trackSelector.BuildUponParameters().SetMaxVideoSizeSd());
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(this);

Uri hls = Uri.Parse("http://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/.m3u8");
IMediaSource mediaSource = BuildHlsMediaSource(hls);	//here you can build media source of desired type

player = new SimpleExoPlayer.Builder(this, renderersFactory).SetTrackSelector(trackSelector).Build();
playerView.Player = player;
player.PlayWhenReady = true;
player.Prepare(mediaSource, false, false);

Below is code to get IMediaSource object

private IMediaSource BuildMediaSource(Uri uri)
{
     DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, "ExoplayerTest");
     return new ProgressiveMediaSource.Factory(dataSourceFactory).CreateMediaSource(uri);
}

private IMediaSource BuildDashMediaSource(Uri uri)
{
    DefaultDataSourceFactory dataSourceFactory =  new DefaultDataSourceFactory(this, "ExoplayerTest");
    DashMediaSource.Factory mediaSourceFactory = new DashMediaSource.Factory(dataSourceFactory);
    return mediaSourceFactory.CreateMediaSource(uri);
}

private IMediaSource BuildHlsMediaSource(Uri uri)
{
    DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("ExoplayerTest");
    IMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory).SetAllowChunklessPreparation(true).CreateMediaSource(uri);
    return hlsMediaSource;
}

Feel free to customize above code by Your needs.