Xamarin Forms libvlcsharp полноэкранный - PullRequest
0 голосов
/ 14 января 2020

Я бы хотел понять, как настраиваются параметры настройки экрана, такие как «По размеру экрана», «Оригинал», «Подгонка по размеру», если возможно сохранить только указанные c параметры.

Я попробовал это ниже, видео открывается в размере заполнения, но если я нажимаю кнопку Размер, у него все еще есть другие варианты:

var myString = "Fit screen";
byte[] bytes = Encoding.Default.GetBytes(myString);
myString = Encoding.UTF8.GetString(bytes);
MediaPlayer = new MediaPlayer(media) { EnableHardwareDecoding = true, AspectRatio = myString };

Кроме того, я хотел бы знать, могу ли я открыть при нажатии на кнопку видео в другом режиме в полноэкранном режиме, как в YouTube.

1 Ответ

1 голос
/ 15 января 2020

Учитывая, что LibVLCSharp является полностью открытым исходным кодом, я рекомендую вам взглянуть на код всякий раз, когда у вас есть вопросы.

Управление соотношением сторон предоставляется как функция компонента MediaPlayerElement, но вы можете легко извлечь и использовать этот код, если вы не используете этот компонент.

private void UpdateAspectRatio(AspectRatio? aspectRatio = null)
{
    var mediaPlayer = MediaPlayer;
    var videoView = VideoView;
    if (aspectRatio == null)
    {
        aspectRatio = GetAspectRatio(mediaPlayer);
    }
    if (videoView != null && mediaPlayer != null)
    {
        switch (aspectRatio)
        {
            case AspectRatio.Original:
                mediaPlayer.AspectRatio = null;
                mediaPlayer.Scale = 1;
                break;
            case AspectRatio.Fill:
                var videoTrack = GetVideoTrack(mediaPlayer);
                if (videoTrack == null)
                {
                    break;
                }
                mediaPlayer.Scale = 0;
                mediaPlayer.AspectRatio = IsVideoSwapped((VideoTrack)videoTrack) ? $"{videoView.Height}:{videoView.Width}" :
                    $"{videoView.Width}:{videoView.Height}";
                break;
            case AspectRatio.BestFit:
                mediaPlayer.AspectRatio = null;
                mediaPlayer.Scale = 0;
                break;
            case AspectRatio.FitScreen:
                videoTrack = GetVideoTrack(mediaPlayer);
                if (videoTrack == null)
                {
                    break;
                }
                var track = (VideoTrack)videoTrack;
                var videoSwapped = IsVideoSwapped(track);
                var videoWidth = videoSwapped ? track.Height : track.Width;
                var videoHeigth = videoSwapped ? track.Width : track.Height;
                if (track.SarNum != track.SarDen)
                {
                    videoWidth = videoWidth * track.SarNum / track.SarDen;
                }

                var ar = videoWidth / (double)videoHeigth;
                var videoViewWidth = videoView.Width;
                var videoViewHeight = videoView.Height;
                var dar = videoViewWidth / videoViewHeight;

                var rawPixelsPerViewPixel = DisplayInformation.ScalingFactor;
                var displayWidth = videoViewWidth * rawPixelsPerViewPixel;
                var displayHeight = videoViewHeight * rawPixelsPerViewPixel;
                mediaPlayer.Scale = (float)(dar >= ar ? (displayWidth / videoWidth) : (displayHeight / videoHeigth));
                mediaPlayer.AspectRatio = null;
                break;
            case AspectRatio._16_9:
                mediaPlayer.AspectRatio = "16:9";
                mediaPlayer.Scale = 0;
                break;
            case AspectRatio._4_3:
                mediaPlayer.AspectRatio = "4:3";
                mediaPlayer.Scale = 0;
                break;
        }
    }

    if (_aspectRatio != aspectRatio)
    {
        _aspectRatio = (AspectRatio)aspectRatio;
        AspectRatioChanged?.Invoke(this, EventArgs.Empty);
    }
}

См. Здесь https://code.videolan.org/videolan/LibVLCSharp/blob/3.x/LibVLCSharp/Shared/MediaPlayerElement/AspectRatioManager.cs

Обратите внимание, что свойства AspectRatio и Scale необходимо обновлять при изменении соотношения сторон, так как они переплетаются.

Я хотел бы знать, могу ли я открыть видео в другом режиме в полноэкранном режиме при нажатии кнопки, как это делает youtube.

Я не уверен, что вы подразумеваете под этим. Если вы ссылаетесь на навигацию, см. мой блог об этом.

...