Воспроизведение аудио URL с помощью xamarin MediaPlayer - PullRequest
0 голосов
/ 04 мая 2018

Почему xamarin MediaPlayer (на Xamarin.Android) может воспроизводить звук в виде потока по такой ссылке (mediaUrl1): https://ia800806.us.archive.org/15/items/Mp3Playlist_555/AaronNeville-CrazyLove.mp3

Но не могу сделать это по такой ссылке (mediaUrl2): http://api -streaming.youscribe.com / v1 / продукты / 2919465 / документы / 3214936 / аудио / поток

private MediaPlayer player;
//..
player = new MediaPlayer();
player.SetAudioStreamType(Stream.Music);
//..
await player.SetDataSourceAsync(ApplicationContext, Android.Net.Uri.Parse(mediaUrl));
//..
player.PrepareAsync();
//..

Есть ли способ воспроизвести приведенную выше ссылку (mediaUrl2) без (конечно) загрузки файла первым?

Вот полный источник образца, который я использую. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 мая 2018

http://api -streaming.youscribe.com / v1 / продукты / 2919465 / документы / 3214936 / аудио / поток

Это поток HTTP mpga, который напрямую не поддерживается ни одним из известных мне API-интерфейсов Android и, следовательно, не поддерживается MediaPlayer (для получения дополнительной информации обратитесь к форматам поддержки Android чтение).

Вы можете просмотреть вывод logcat вашего кода MediaPlayer, и вы увидите вывод вида:

[MediaPlayerNative] start called in state 4, mPlayer(0x8efb7240)
[MediaPlayerNative] error (-38, 0)
[MediaPlayer] Error (-38,0)
[MediaHTTPConnection] readAt 1161613 / 32768 => java.net.ProtocolException
[MediaHTTPConnection] readAt 1161613 / 32768 => java.net.ProtocolException
[MediaPlayerNative] error (1, -2147483648)
[MediaPlayer] Error (1,-2147483648)

Google ExoPlayer от Google может правильно транслировать этот формат мультимедиа.

Это действительно простой и очень грубый пример ExoPlayer, но он покажет вам, что он воспроизводит этот поток:

Пример ExoPlayer:

var mediaUrl = "http://api-streaming.youscribe.com/v1/products/2919465/documents/3214936/audio/stream";
var mediaUri = Android.Net.Uri.Parse(mediaUrl);

var userAgent = Util.GetUserAgent(this, "ExoPlayerDemo");
var defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent);
var defaultDataSourceFactory = new DefaultDataSourceFactory(this, 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);

exoPlayer = ExoPlayerFactory.NewSimpleInstance(this, defaultTrackSelector);
exoPlayer.Prepare(extractorMediaSource);
exoPlayer.PlayWhenReady = true;

Примечание: exoPlayer - это переменная уровня класса SimpleExoPlayer type

Примечание. При этом используются библиотеки связывания Xamarin.Android из пакета Xam.Plugins.Android.ExoPlayer

.

Документы ExoPlayer:

...