当前位置: 首页 > article >正文

Xamarin 实现播放视频 MP4

我的想法是在App启动时播放一段视频,实现方式如下:

准备一个视频: Logo.mp4

添加到资源中:Assets

然后将资源设置为 AndroidAsset

启动时,将资源文件拷贝到程序目录的files下:

 protected override void OnCreate(Bundle savedInstanceState)
 {
     base.OnCreate(savedInstanceState);            
     Xamarin.Essentials.Platform.Init(this, savedInstanceState);
     global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
     LoadApplication(new App());

     Instance = this;

     CopyFileToDataFolder("Logo.mp4");
 }

     /// <summary>
     /// 将资源拷贝到files目录
     /// </summary>
     /// <param name="fileName"></param>
     private void CopyFileToDataFolder(string fileName)
     {
         using (var sourceFile = Assets.Open(fileName))
         {
             var destFile = Path.Combine(FilesDir.AbsolutePath, fileName);
             if (!File.Exists(destFile))
             {
                 using (var destStream = new FileStream(destFile, FileMode.Create, FileAccess.Write))
                 {
                     sourceFile.CopyTo(destStream);
                 }
             }
         }
     }

接着Nuget添加视频控件包:Xamarin Community Toolkit   注意兼容版本

Xamarin Community Toolkit  要求Xamarin.Forms 最低版本为5.0.0.2291   更新到这个版本即可(稳定一些,最新版本有其他兼容性问题)

在UI上添加 视频播放控件 MediaElement:

xmlns:vid="clr-namespace:Xamarin.CommunityToolkit.UI.Views;assembly=Xamarin.CommunityToolkit"


 <vid:MediaElement
     x:Name="videoPlayer"
     Aspect="AspectFill"
     AutoPlay="True"
     HorizontalOptions="Fill"
     ShowsPlaybackControls="False"
     VerticalOptions="Fill" />

最后,在App启动时,添加播放视频的代码


var assembly = System.Reflection.Assembly.GetExecutingAssembly();
//获取程序文件目录 即files 目录  -- Logo.mp4资源的拷贝目录
string baseUri = DependencyService.Get<ILocalIPAddress>().GetBaseDirectory();
string uri = baseUri + "/Logo.mp4";
if (System.IO.File.Exists(uri))
{
    //播放文件
    MediaSource ms = MediaSource.FromFile(uri);
    var videoPlayer = UIElement.FindByName<MediaElement>("videoPlayer");
    videoPlayer.Source = ms;
    videoPlayer.MediaEnded += ((object sender, EventArgs e) =>
    {
        //播放完成后的处理事件
        Thread.Sleep(500);
    });
}


http://www.kler.cn/a/377765.html

相关文章:

  • LangChain教程 - 表达式语言 (LCEL) -构建智能链
  • ssh 完全命令行 登录服务器 , 无需交互的方法
  • 使用Excel制作通达信自定义“序列数据“
  • Ingress-Nginx Annotations 指南:配置要点全方面解读(上)
  • 机器人加装电主轴【铣削、钻孔、打磨、去毛刺】更高效
  • Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
  • 你竟然还不了解 LDAP?
  • 【运维类】服务器日常维护清单及检查表,运维巡查,设备巡检,服务器检查(Word原件)
  • leetcode hot100【LeetCode 139. 单词拆分】java实现
  • NLP segment-01-聊一聊分词 AI 的基础
  • flutter 写个简单的界面
  • H5页面在线预览pdf
  • ceph补充介绍
  • [论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation
  • 编写dockerfile生成镜像,并且构建容器运行
  • Javascript数据结构与算法——栈与队列
  • 自然语言处理领域中的两个主要技术挑战:实体歧义和上下文管理
  • 网络模型——二层转发原理
  • 如何使用python轻松入手文本数据分析?
  • vue项目安装组件失败解决方法
  • element-plus 修改主题色(按需导入)
  • 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】
  • 整合 flatten-maven-plugin 插件:解决子模块单独打包失败问题
  • 字符串左旋 (干货无废话)
  • flutter-防抖
  • 如何使用AdsPower指纹浏览器克服爬虫技术限制,安全高效进行爬虫!