【问题标题】:Include a Libvlc videoview into a layout将 Libvlc videoview 包含到布局中
【发布时间】:2020-08-01 06:33:01
【问题描述】:

任何人都可以帮助我使用 c# 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#

【问题讨论】:

    标签: c# xamarin xamarin.android libvlc libvlcsharp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      试试official samples 之一,比如LocalNetwork,它内置了导航功能。

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

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

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

      我建议您具体说明导致崩溃的代码行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 2014-03-06
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        相关资源
        最近更新 更多