SMB手机VR播放器(四):http video intent-filter

前文说到的 intent-filter 仅能匹配普通本地文件的 intent,那么如何匹配 http video 类型的 intent 呢?

HTTP video intent 结构

一般情况下,Android 端发起一个隐式 http video intent 的代码如下:

Uri uri = Uri.parse("http://www.azimiao.com/random.mp4");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");
Log.d("SMBFileActivity:",videoUrl);
//强制弹出选择播放器框,仅用来测试
Intent createChooser = Intent.createChooser(intent,"请选择播放器");
startActivity(createChooser);

这时,如果我们使用上文中的 intent-filter,是匹配不到该 intent 的,自然不会出现在播放器选择框内。

声明 HTTP video intent-filter

前文中说过安卓系统会根据 intent 数据匹配 intent-filter,只有通过三项匹配测试的 app 才会出现在选择弹窗内,所以需要为播放器应用添加对应的 intent-filter。

打开 Unity Asset/Plugins/Android/文件夹下的 AndroidManifest.xml ,intent-filter 添加下面的匹配规则:

<data android:scheme="http" android:mimeType="video/*" />

添加完成后应该如下所示:

为了读取 HTTP 内容,有可能需要申请网络权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

一般情况下,如果使用了UnityEngine.Networking,编译时 Unity 会自动添加上面的 uses-permission。

Cleartext HTTP traffic not permitted

如果你的设备是安卓 8.0 以上,则使用依赖 ExoPlayer 的播放器(例如A/VProVideo)打开 HTTP 链接时,会报错:

Cleartext HTTP traffic not permitted. See https://exoplayer.dev/issues/cleartext-not-permitted

这是因为该播放器后续版本为了安全性,默认仅支持访问 HTTPS 链接。

为了解决该问题,需要将 android:usesCleartextTraffic 设置为 true。

<Application
    ……
    android:usesCleartextTraffic="true">

如上文代码,丢到 Application 节点内即可。

实机运行

实机运行,通过某些内置 http 服务器的文件管理器打开 http 形式的远端文件,弹出提示:

一切正常。

其他

目前(周日)已经实现 HTTP、本地文件的播放,后续需要处理视频类型选择、UI 播放控制等逻辑,暂定使用 Xbox 手柄控制 UI。

至于 SMB to HTTP,目前已经找到可行的解决方案,可以往后拖一拖。

本文为定时发送,机智如我,期望搜索引擎认为我更新很频繁。

梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/8322.html
欢迎加入梓喵出没博客交流群:313732000

我来吐槽

*

*

0位绅士参与评论

  1. hhxun01-08 02:38 回复

    太监了还是找到合适的方案了?