![](/img/trans.png)
[英]How to remove video black bands in videoView with LibVlcSharp?
[英]How to reproduce a second video with LibVLCSharp?
我試圖創建一個彈出頁面(使用Rg.Plugin.Popup
),該頁面必須顯示從API獲取的流視頻。 每次我導航到此頁面時,我都希望根據我來自頁面的參數(通過Messenger發送的消息獲取它們)顯示從API獲取的不同視頻。 它似乎在第一次運行時就起作用了,但是,當我關閉Popup頁面時,再次打開它時,videoView變黑了,並在輸出中寫道: Failed to get window format
。
那是我的代碼(基於此處提供的示例: https : //code.videolan.org/videolan/LibVLCSharp/tree/master/Samples/Forms ):
代碼隱藏頁面:
public partial class WebcamVideoPopUpPage : PopupPage
{
public WebcamVideoPopUpPage()
{
var vm = App.Locator.WebCamVideoVM;
this.BindingContext = vm;
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
Messenger.Default.Send(new OnApperingVideoMessage());
}
private void VideoView_MediaPlayerChanged(object sender,
LibVLCSharp.Shared.MediaPlayerChangedEventArgs e)
{
Messenger.Default.Send(new OnVideoViewInitializedMessage());
}
protected override void OnDisappearing()
{
base.OnDisappearing();
}
}
xaml中的videoView:
<shared:VideoView x:Name="VideoView"
MediaPlayer ="{Binding MediaPlayer}"
HorizontalOptions ="FillAndExpand"
VerticalOptions ="FillAndExpand"
MediaPlayerChanged ="VideoView_MediaPlayerChanged"/>
ViewModel:
public class WebcamVideoViewModel : BaseViewModel
{
private LibVLC LibVLC { get; set; }
private bool IsLoaded { get; set; }
private bool IsVideoViewInitialized { get; set; }
private Media media { get; set; }
private MediaPlayer _mediaPlayer;
public MediaPlayer MediaPlayer
{
get { return _mediaPlayer; }
set
{
_mediaPlayer = value;
OnPropertyChanged();
}
}
public WebcamVideoViewModel(INavigationService navigationService, IApiManagerFactory apiFactory) : base(navigationService, apiFactory)
{
Messenger.Default.Register<InfoWebcamVideoMessage>(this, OnReceivedInfoWebcam);
Messenger.Default.Register<OnApperingVideoMessage>(this, OnAppearing);
Messenger.Default.Register<OnVideoViewInitializedMessage>(this, OnVideoViewInitialized);
Task.Run(Initialize);
}
private void Initialize()
{
Core.Initialize();
LibVLC = new LibVLC();
MediaPlayer = new MediaPlayer(LibVLC);
}
private async void OnReceivedInfoWebcam(InfoWebcamVideoMessage msg)
{
var response = await ApiManager.GetVideoWebcam(msg.Mpr, msg.Uuid);
if (response.IsSuccessStatusCode)
{
var stream = await response.Content.ReadAsStreamAsync();
media = new Media(LibVLC, stream);
Play();
}
}
public void OnAppearing(OnApperingVideoMessage msg)
{
IsLoaded = true;
}
public void OnVideoViewInitialized(OnVideoViewInitializedMessage msg)
{
IsVideoViewInitialized = true;
}
private void Play()
{
if (IsLoaded && IsVideoViewInitialized)
{
MediaPlayer.Play(media);
}
}
}
我解決了覆蓋OnAppering方法的問題:
protected override void OnDisappearing()
{
base.OnDisappearing();
VideoView.MediaPlayer.Stop();
VideoView.MediaPlayer = null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.