コード例 #1
0
        ///Setting data source for the player (can do buffring)

        private async Task setPlayerDataSourse()
        {
            try
            {
                await player.SetDataSourceAsync(MainActivity.AudioPath);

                var mFocusRequest = new AudioFocusRequestClass.Builder(AudioFocus.Gain)
                                    .SetAudioAttributes(mPlaybackAttributes)
                                    .SetAcceptsDelayedFocusGain(true)
                                    .SetWillPauseWhenDucked(true)
                                    .SetOnAudioFocusChangeListener(this)
                                    .Build();


                var focusResult = audioManager.RequestAudioFocus(mFocusRequest);
                if (focusResult != AudioFocusRequest.Granted)
                {
                    Console.WriteLine("Could not get audio focus");
                }

                player.PrepareAsync();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine("Unable to start playback: " + ex);
            }
        }
コード例 #2
0
        private void SetAudioFocus(bool focused)
        {
            try
            {
                if (AudioManager == null)
                {
                    AudioManager = (AudioManager)Application.Context.GetSystemService(Context.AudioService);
                }

                if (focused)
                {
                    PreviousAudioMode      = AudioManager.Mode;
                    PreviousSpeakerphoneOn = AudioManager.SpeakerphoneOn;

                    if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                    {
                        var playbackAttributes = new AudioAttributes.Builder()
                                                 .SetUsage(AudioUsageKind.VoiceCommunication)
                                                 .SetContentType(AudioContentType.Speech)
                                                 .Build();

                        var focusRequest = new AudioFocusRequestClass.Builder(AudioFocus.Gain)
                                           .SetAudioAttributes(playbackAttributes)
                                           .SetAcceptsDelayedFocusGain(true)
                                           .SetOnAudioFocusChangeListener(this)
                                           .Build();

                        AudioManager.RequestAudioFocus(focusRequest);
                    }
                    else
                    {
#pragma warning disable 618
                        AudioManager.RequestAudioFocus(this, Stream.VoiceCall, AudioFocus.GainTransient);
#pragma warning restore 618
                    }

                    //Start by setting MODE_IN_COMMUNICATION as default audio mode. It is
                    //required to be in this mode when playout and/or recording starts for
                    //best possible VoIP performance. Some devices have difficulties with speaker mode
                    //if this is not set.
                    AudioManager.SpeakerphoneOn = TypeCall != TypeCall.Audio;

                    //AudioManager.SpeakerphoneOn = false;
                    AudioManager.Mode = Mode.InCommunication;
                }
                else
                {
                    AudioManager.Mode           = PreviousAudioMode;
                    AudioManager.SpeakerphoneOn = PreviousSpeakerphoneOn;
#pragma warning disable 618
                    AudioManager.AbandonAudioFocus(null);
#pragma warning restore 618
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #3
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            var builder = new AudioFocusRequestClass.Builder(AudioFocus.Gain);

            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            Android.Support.V7.Widget.Toolbar toolbar = FindViewById <Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

            FloatingActionButton fab = FindViewById <FloatingActionButton>(Resource.Id.fab);

            fab.Click += FabOnClick;
        }
コード例 #4
0
        /// <summary>
        /// Intializes the player.
        /// </summary>
        public async Task Play()
        {
            if (mediaPlayer != null && this.MediaPlayerState == PlaybackStateCompat.StatePaused)
            {
                //We are simply paused so just start again
                mediaPlayer.Start();
                this.UpdatePlaybackState(PlaybackStateCompat.StatePlaying);
                this.StartNotification();

                //Update the metadata now that we are playing
                this.UpdateMediaMetadataCompat();
                return;
            }

            if (mediaPlayer == null)
            {
                this.InitializePlayer();
            }

            if (mediaSessionCompat == null)
            {
                this.InitMediaSession();
            }

            if (mediaPlayer.IsPlaying)
            {
                this.UpdatePlaybackState(PlaybackStateCompat.StatePlaying);
                return;
            }

            try
            {
                MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();

                await mediaPlayer.SetDataSourceAsync(this.ApplicationContext, Android.Net.Uri.Parse(audioUrl));

                await metaRetriever.SetDataSourceAsync(audioUrl, new Dictionary <string, string>());

                //x var focusResult = audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain);
                var afrcb = new AudioFocusRequestClass.Builder(AudioFocus.Gain);
                afrcb.SetOnAudioFocusChangeListener(this);

                var focusResult = audioManager.RequestAudioFocus(afrcb.Build());

                if (focusResult != AudioFocusRequest.Granted)
                {
                    //could not get audio focus
                    Console.WriteLine("Could not get audio focus");
                }

                this.UpdatePlaybackState(PlaybackStateCompat.StateBuffering);
                mediaPlayer.PrepareAsync();

                this.AquireWifiLock();
                this.UpdateMediaMetadataCompat(metaRetriever);
                this.StartNotification();

                byte[] imageByteArray = metaRetriever.GetEmbeddedPicture();
                if (imageByteArray == null)
                {
                    this.Cover = await BitmapFactory.DecodeResourceAsync(this.Resources, Resource.Drawable.album_art);
                }
                else
                {
                    this.Cover = await BitmapFactory.DecodeByteArrayAsync(imageByteArray, 0, imageByteArray.Length);
                }
            }
            catch (Exception ex)
            {
                this.UpdatePlaybackState(PlaybackStateCompat.StateStopped);

                mediaPlayer.Reset();
                mediaPlayer.Release();
                mediaPlayer = null;

                //unable to start playback log error
                Console.WriteLine(ex);
            }
        }
コード例 #5
0
        public void Start()
        {
            if (_player != null)
            {
                Stop();
            }

            _handler.Post(() =>
            {
                try
                {
                    var defaultBandwidthMeter         = new DefaultBandwidthMeter();
                    var adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(defaultBandwidthMeter);
                    var defaultTrackSelector          = new DefaultTrackSelector(adaptiveTrackSelectionFactory);

                    _player = ExoPlayerFactory.NewSimpleInstance(_context, defaultTrackSelector);
                    _player.AddListener(this);
                    _player.PlayWhenReady = true;

                    if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                    {
                        var audioFocusRequest = new AudioFocusRequestClass.Builder(AudioFocus.Gain)
                                                .SetOnAudioFocusChangeListener(this)
                                                .SetAudioAttributes(new AudioAttributes.Builder()
                                                                    .SetUsage(AudioUsageKind.Media)
                                                                    .SetContentType(AudioContentType.Music)
                                                                    .Build())
                                                .Build();

                        if (_audioManager.RequestAudioFocus(audioFocusRequest) == AudioFocusRequest.Granted)
                        {
                            play();
                        }
                    }
                    else
                    {
                        #pragma warning disable CS0618 // Type or member is obsolete
                        if (_audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain) == AudioFocusRequest.Granted)
                        {
                            play();
                        }
                        #pragma warning restore CS0618 // Type or member is obsolete
                    }
                }
                catch (Exception ex)
                {
                    //Log.Error(TAG, $"Could not start player: {ex.Message}");
                    //Log.Debug(TAG, ex.ToString());
                    Error?.Invoke(this, new RadioStationErrorEventArgs(ex));
                    IsPlaying = false;
                }
            });

            void play()
            {
                var mediaUri  = Android.Net.Uri.Parse(StreamUrl);
                var userAgent = Util.GetUserAgent(_context, "wzxv.app.radio.player");
                var defaultHttpDataSourceFactory = new DefaultHttpDataSourceFactory(userAgent);
                var defaultDataSourceFactory     = new DefaultDataSourceFactory(_context, null, defaultHttpDataSourceFactory);
                var mediaSourceFactory           = new ExtractorMediaSource.Factory(defaultDataSourceFactory);
                var mediaSource = mediaSourceFactory.CreateMediaSource(mediaUri);

                _player.Prepare(mediaSource);
                IsPlaying = true;
            }
        }