2

任何人都可以用 ac# xamarin 代码示例帮助我如何将 LibVLC VideoView 作为 VideoView 控件包含到布局中吗?我想显示一个短视频,然后在完成后返回我的主布局。我成功地将 VLC 播放器包含在我的项目中(感谢http://xamaringuyshow.com/2019/08/23/xamarin-forms-vlc-video-payer/),但我想以单独的布局播放视频并在剪辑完成后返回。

剪辑完成后(但媒体播放器没有任何控制按钮 - 寻找视频,暂停或播放 - 另一个问题......),我尝试继续我的应用程序的主线程,我得到“只有创建视图层次结构的原始线程才能触及其视图”错误并且应用程序崩溃。

这是我的 LibVLC 代码的一部分:

public void ReplayVideoVLC(string link)
        {
            mainActivity.SetContentView(App3.Resource.Layout.VideoFullScreen);

            _libVLC = new LibVLC();
            _mediaPlayer = new MediaPlayer(_libVLC)
            {
                EnableHardwareDecoding = true
            };

            _videoView = new LibVLCSharp.Platforms.Android.VideoView(mainActivity) { MediaPlayer = _mediaPlayer };
            mainActivity.AddContentView(_videoView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));            
            var media = new Media(_libVLC, link, FromType.FromLocation);            
            Core.Initialize();

            _videoView.SetZOrderOnTop(true);
            _videoView.MediaPlayer.Stopped += MediaPlayer_Stopped;
            _videoView.MediaPlayer.EncounteredError += MediaPlayer_EncounteredError;
            video_error = false;
            vlc_video_playing = true;
                try
                {            
                    _videoView.MediaPlayer.Play(media);
                }
                catch (Exception exx)
                {
                    exx = exx;
                    vlc_video_playing = false;
                }           
        }

        private void MediaPlayer_EncounteredError(object sender, EventArgs e)
        {
            //error on VLC replay...            
            video_error = true;
            Xamarin.Forms.Device.OpenUri(new Uri(client.current_video_url));
            vlc_video_playing = false;
        }

        private void MediaPlayer_Stopped(object sender, EventArgs e)
        {           
            try
            {         
                _videoView.MediaPlayer = null;
                _videoView = null;
            }
            catch (Exception exx)
            {
                //exx = exx;
            }

            if (!video_error)
            {
        mainActivity.ContinueGame();                
            }
            else
            {           
                Xamarin.Forms.Device.OpenUri(new Uri(client.current_video_url));
            }
            vlc_video_playing = false;
        }
```c#
4

2 回答 2

1

您必须使用 .将更新 UI 的后台任务部分移动到主线程上Activity.RunOnUiThread。所以,它可能看起来像这样:

Activity.RunOnUiThread(_videoView.MediaPlayer.Play(media));

于 2019-10-02T20:08:24.277 回答
0

试试官方示例之一,例如 LocalNetwork,它内置了导航。

但是媒体播放器没有任何控制按钮 - 寻找视频,暂停或播放 - 另一个问题......

是的,它确实。媒体播放器具有所有这些 API,您可以使用智能感知浏览文档。如果您的意思是 UI 控制按钮,您需要 MediaElement,在这种情况下,我建议您从这个示例开始。

我尝试继续我的应用程序的主线程,我得到一个“只有创建视图层次结构的原始线程才能触及它的视图”错误并且应用程序崩溃了。

我建议您指定代码的哪一行导致崩溃。

于 2019-10-03T04:33:16.977 回答