Xamarin.Android实现播放视频功能

1、目的

实现在Xamarin.Android中实现视频播放的功能

2、具体实现

视频的来源有多种方式,最简单就是本地的形式。

2.1 本地资源

在Resources文件夹,会有不同的子文件夹,具体如下:

序号资源名称内容
1animator描述属性动画的 XML 文件
2anim描述补间动画的 XML 文件
3color描述颜色状态列表的 XML 文件
4drawable可绘制资源(包括:图像文件(jpg、png等)、位图、XML文件等)
5layout用于存放页面布局的XML文件
6menu用于存放菜单定义的XML文件
7raw二进制资源、例如视频等
8values用于存放设定值的XML文件
9xml用于存放配置文件的XML文件

这里面有一些重点:

animatoranim的区别

里面内容较多,推荐文章:两者的不同

rawAssets的差别

1、raw中的资源会被包括到Resources中。因此可以在代码中直接使用[<PackageName>.]Resource.<ResourceType>.<ResourceName> 方式直接访问资源(例如: Resource.Raw.zl002)。asset中的内容需要使用AssetManager来访问资源。
2、也正是因为第1条的原因,在asset文件夹中的文件,在编译后仍为原始文件。
3、raw下不可再创建文件夹(不能有目录);asset下可以有文件夹,有目录。
4、两者之间数据的读取方式略微不同。
asset的读取方式

// Read the contents of our asset
string content;
AssetManager assets = this.Assets;
using (StreamReader sr = new StreamReader (assets.Open ("read_asset.txt")))
{
    content = sr.ReadToEnd ();
}

raw资源的读取方式

Stream rsr= this.Resources.OpenRawResource(Resource.Raw.zl002);

5、【?】操作文件的能力不同。Google的Android系统处理Asset有个bug,在AssetManager中不能处理单个超过1MB的文件,不然会报异常,raw没这个限制可以放个4MB的Mp3文件没问题。

xmlAssets的区别

与上面讲到基本差别不大。xml文件夹下可以只用资源ID进行访问。xml文件夹与raw文件夹差别为,xml下的资源会被编译为二进制;而raw不会被编译为二进制。

2.2 具体实现

1、添加资源

将资源添加到raw文件夹中,并设置为AndroidResource

2、添加控件

layout布局中使用VideoView

<VideoView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/videoView2" />

3、初始化控件

Activity中进行控件初始化及添加控制器

private Android.Widget.VideoView videoView =null;
private Android.Widget.MediaController mediaController = null;

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    
    SetContentView(Resource.Layout.activity_main);
    

		//控制器,用于控制视频的开始、暂停等操作的
    mediaController= new Android.Widget.MediaController(this);

		//加载资源,并初始化
    videoView = FindViewById<Android.Widget.VideoView>(Resource.Id.videoView2);
    var uri = Android.Net.Uri.Parse("android.resource://" + Application.PackageName + "/" + Resource.Raw.zl002);//使用这种方式
    videoView.SetVideoURI(uri);
    videoView.Visibility = ViewStates.Visible;
    videoView.ShowContextMenu();
    videoView.SetMediaController(mediaController);
}

然后在某个地方调用Start方法,开始播放视频

private void FabOnClick(object sender, EventArgs eventArgs)
{
    View view = (View) sender;
    try
    {
        videoView.Start();//开始播放视频
    }
    catch(Exception e)
    {
        Snackbar.Make(view, e.Message, Snackbar.LengthLong)
        .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show();
    }
}

4、效果如下

在这里插入图片描述

3、参考资料

视频播放的参考资料:参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值