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,目前已经找到可行的解决方案,可以往后拖一拖。
本文为定时发送,机智如我,期望搜索引擎认为我更新很频繁。
太监了还是找到合适的方案了?