Untiy中如何嵌入前端页面,从而播放推流视频?

最近工作中频繁用到unity,虽然楼主之前也搞过一些UNTY游戏开发项目,但对于视频这块还是不太了解,所以我们采用的方案是在Unity里寻找一个插件来播放推流视频。经过我的一番寻找,发现了这款Vuplex 3D WebView,它可以完美的打通Unity和前端js。

具体步骤如下:

下载资源包,如果觉得收费,可以找楼主要资源哈。这里就不挂链接了。

在资源包里包含了很多个例子,其中有一个叫做SimplewebvidwDemo的例子,大家可以参照这个例子来实现自己需求。

这个插件本身也带有很多的说明文档,如果觉得不太懂怎么用,可以看看文档,只不过文档是英文的。

新建一个预制体,添加脚本,这个预制体也是例子里的, 我们可以改动尺寸调整大小哈。

接着就是写一个自己的类,来执行视频加载的逻辑。具体可以看看我下面的写法

cs 复制代码
public class SimpleView : MonoBehaviour
{
   public  WebViewPrefab _webViewPrefab;
    // Start is called before the first frame update
    void Awake()
    {
        Web.SetUserAgent(false);
    }

    // Update is called once per frame
    async void Start()
    {

        // The WebViewPrefab's InitialUrl property is set via the editor, so it
        // automatically loads that URL when it initializes.
        _webViewPrefab = GameObject.Find("WebViewPrefab").GetComponent<WebViewPrefab>();
        //  _setUpKeyboards();

        // Wait for the WebViewPrefab to initialize, because the WebViewPrefab.WebView property
        // is null until the prefab has initialized.
        await _webViewPrefab.WaitUntilInitialized();
        _webViewPrefab.WebView.LoadUrl("streaming-assets://index.html");
        // The WebViewPrefab has initialized, so now we can use the IWebView APIs
        // using its WebViewPrefab.WebView property.
        // https://developer.vuplex.com/webview/IWebView
        _webViewPrefab.WebView.UrlChanged += (sender, eventArgs) => {
            Debug.Log("[SimpleWebViewDemo] URL changed: " + eventArgs.Url);
        };
        await _webViewPrefab.WebView.WaitForNextPageLoadToFinish();
        // _webViewPrefab.WebView.PostMessage("{\"type\": \"greeting\", \"message\": \"Hello from C#!\"}");
        /* await _webViewPrefab.WebView.ExecuteJavaScript(@"
startPlay('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F', sdkList.sdk2, setSrcObjectCallback2)
");*/
      //  await _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_back('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F')");
        //
    }

    public void PlayTwoVideoUrl(string url)
    {
       // url = "webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F";// webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F;
        var value = string.Format(@"androidToJs_layoutTwo('{0}')", url);
        Debug.Log(@value);
        _webViewPrefab.WebView.ExecuteJavaScript(@value);
        //  _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_back('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F')");
    }

    public void PlayOneVideoUrl(string url)
    {
        // url = "webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F";// webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F;
        var value = string.Format(@"androidToJs_layoutOne('{0}')", url);
        Debug.Log(@value);
        _webViewPrefab.WebView.ExecuteJavaScript(@value);
        //  _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_back('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F')");
    }

    public void PlayThreeVideoUrl(string url)
    {
        // url = "webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F";// webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F;
        var value = string.Format(@"androidToJs_layoutThree('{0}')", url);
        Debug.Log(@value);
        _webViewPrefab.WebView.ExecuteJavaScript(@value);
        //  _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_back('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F')");
    }

    public void PlayFourVideoUrl(string url)
    {
        // url = "webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F";// webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F;
        var value = string.Format(@"androidToJs_layoutFour('{0}')", url);
        //Debug.Log(@value);
        _webViewPrefab.WebView.ExecuteJavaScript(@value);
        //  _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_back('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F')");
    }

    public void PlayFiveVideoUrl(string url)
    {
        // url = "webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F";// webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F;
        var value = string.Format(@"androidToJs_layoutFive('{0}')", url);
        Debug.Log(@value);
        _webViewPrefab.WebView.ExecuteJavaScript(@value);
        //  _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_back('webrtc://148.70.213.246:21985/rtmplive/15-43-48-0C-11-1F-1E-41-4D-64-30-00-00-C0-D5-88-AF-02-3F')");
    }



    public  void  InitVideo()
    {
        _webViewPrefab.WebView.ExecuteJavaScript(@"androidToJs_close()");
    }

    public void SetVideoLayout(string layout ="1")
    {
        var value = string.Format(@"changeLayout('{0}')", layout);
        _webViewPrefab.WebView.ExecuteJavaScript(@value);
    }
}

像里面的androidToJs_layoutThree是我们跟前端页面的通讯函数,可以问前端取得,上层只需要调用这个类封装好的函数,就能实现视频的播放和暂停功能 。

相关推荐
Rysxt_6 分钟前
Vuex 教程 从入门到实践
前端·javascript·vue.js
开开心心就好13 分钟前
微软官方出品:免费数据恢复工具推荐
网络·笔记·microsoft·pdf·word·音视频·symfony
by__csdn21 分钟前
Node.js版本与npm版本的对应关系
前端·npm·node.js
AI_567843 分钟前
Webpack性能优化终极指南:4步实现闪电打包
前端·webpack·性能优化
懷淰メ1 小时前
python3GUI--短视频社交软件 By:Django+PyQt5(前后端分离项目)
后端·python·django·音视频·pyqt·抖音·前后端
小马过河R1 小时前
AIGC首帧图尾帧图生成视频案例教程
aigc·音视频·ai视频
causaliy1 小时前
实践六:防盗链知识点——视频
爬虫·音视频
威风的虫1 小时前
ES6 数组方法:告别循环,拥抱函数式编程
开发语言·前端·javascript
小杨快跑~1 小时前
ES6 Promise:告别回调地狱的异步编程革命
前端·javascript·ecmascript·es6
linweidong1 小时前
VIVO前端面试题及参考答案
前端·跨域·localstorage·重绘·浏览器兼容·git管理·前端重构