我们有视频CMS门户网站,可为React Native移动应用程序提供支持。

方法1:
使用react-native-video效果很好,但是我意识到它需要直接的视频文件URL才能播放。
使用Wistia API提取视频网址很容易,但是由于它以不同的格式存储视频,我们需要知道哪种分辨率,或者一些如何使用“自动”设置进行视频分辨率,从而根据屏幕大小和互联网连接确定正确的视频。
API无法使用此设置。一种解决方案是实际检测到该错误并将其传递给后端,做出决定并传递回正确的 Assets 网址。某种程度上觉得是不正确的,因为涉及太多间接工作,无法使视频正常工作。所以我看了其他选择

方法2
使用的源属性并包含IFrame。
这适用于Youtube视频,但由于某种原因无法与Wistia一起使用。找不到任何能使它正常工作的要点/摘要。

方法3
使用平台特定的组件,例如react-native-wistia
我已请求作者的帮助(在github上引发问题),因为无法从npm注册表中安装它。

方法2 似乎是最通用且最适合要求的方法(除非我完全错过了其他方法)。

我的问题是:

  • 是否有人可以使用适用于Wistia和
  • 的React Native IFrame代码段
  • 是否有更好的方法可以做到这一点,而我可能会错过呢?
  • Wistia上是否需要进行任何设置才能启用从移动设备播放的视频,而我可能会错过这些设置?
  • 最佳答案

    可以通过在网络 View 中插入javascript代码来使用wistia播放器API。在较新版本的react native中,已在WebView组件中引入了InjectionJavascriptCode。 iframe可以包含在html中,也可以在网络 View 中呈现

    要注入(inject)的JsCode

    const jsCode = `
      var wistia_src = document.createElement('script');
      wistia_src.setAttribute('src', '//fast.wistia.com/assets/external/E-v1.js');
      document.body.appendChild(wistia_src);
      window._wq = window._wq || [];
      window._wq.push({
        id: "u8p9wq6mq8",
        options: {
          playerColor: "#56be8e"
        },
        onHasData: function(video) {
          video.bind("play", function() {
            console.log("'play' event fired for " + video.name() + "! 🎉");
            return video.unbind;
          });
    
          video.bind("secondchange", function(s) {
            if (s == 5) {
    
            }
          });
        }
      })
    }
    `;


    网页浏览

    <View style={{ flex: 1 }}>
      <WebView
        source={require('index.html')}
        style={{ flex: 1 }}
        injectedJavaScript={jsCode}
        javaScriptEnabled={true}
        />
    </View>


    index.html

    <html>
      <body>
        <iframe src="//fast.wistia.com/embed/medias/q7w9f2rvhw" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen width="350" height="400"></iframe>
      </body>
    </html>

    08-28 04:19