菜鸟教程小白 发表于 2022-12-12 09:12:01

javascript - Video.js 在 iOS 上的文件加载期间停止


                                            <p><p>我有一个在 iOS 和 Blackberry 上运行的用 PhoneGap/Cordova(1.8.1 直到我敢升级到 2.3.0)编写的应用程序。</p>

<p>当我尝试启动视频播放时,应用会使用视频播放器(我们使用 JQuery 和 JQuery Mobile)切换到视频“页面”div,并设置目标视频的 URL。</p>

<p>播放器旨在播放以前下载到本地文件系统的文件,但目前甚至无法播放从网络流式传输的内容。</p>

<p>我已经为视频播放器上的所有事件添加了监听器,我可以看到一个“loadstart”事件,然后什么也没有。</p>

<p>初始化如下:</p>

<p><strong>HTML:</strong></p>

<pre><code>&lt;video id=&#34;video_player&#34; class=&#34;video-js vjs-default-skin noscroll&#34; controls preload=&#34;none&#34;&gt;
</code></pre>

<p></p>

<p><strong>JavaScript - 初始化:</strong></p>

<pre><code>var DEFAULT_OPTIONS = { controls: true, autoplay: false, preload: &#34;none&#34;, loop: false };

var videoPlayer = null;

try {
videoPlayer = _V_(&#34;video_player&#34;, DEFAULT_OPTIONS, function() {
    log(&#34;Video ready&#34;);
});
} catch (error) {
dumpError(&#34;Problem with initialisation&#34;, error);
}

try {
log(&#34;DEBUG:Setting up video&#34;);
videoPlayer.addEvent(&#34;loadstart&#34;, function() {
    try {
      dumpArguments(&#34;loadstart&#34;, arguments);
    } catch (error) {
      dumpError(&#34;Failed to process loadstart&#34;, error);
    }
});
videoPlayer.addEvent(&#34;loadedmetadata&#34;, function() {
    try {
      dumpArguments(&#34;loadedmetadata&#34;, arguments);
    } catch (error) {
      dumpError(&#34;Failed to process loadedmetadata&#34;, error);
    }
});
videoPlayer.addEvent(&#34;loadeddata&#34;, function() {
    try {
      dumpArguments(&#34;loadeddata&#34;, arguments);
    } catch (error) {
      dumpError(&#34;Failed to process loadeddata&#34;, error);
    }
});
videoPlayer.addEvent(&#34;loadedalldata&#34;, function() {
    try {
      dumpArguments(&#34;loadedalldata&#34;, arguments);
    } catch (error) {
      dumpError(&#34;Failed to process loadedalldata&#34;, error);
    }
});
videoPlayer.addEvent(&#34;progress&#34;, function() {
    try {
      dumpArguments(&#34;progress&#34;, arguments);
    } catch (error) {
      dumpError(&#34;Failed to process progress&#34;, error);
    }
});
videoPlayer.addEvent(&#34;error&#34;, function() {
    try {
      dumpArguments(&#34;error&#34;, arguments);
    } catch (error) {
      dumpError(&#34;Failed to process error&#34;, error);
    }
});
} catch (error) {
dumpError(&#34;Error setting up video controller&#34;, error);
}
</code></pre>

<p><strong>JavaScript - 设置视频播放</strong></p>

<pre><code>APP.avPlayer.video.src(cachedFileRecord.URL);
</code></pre>

<p>APP.avPlayer.video 是在初始化结束时创建的视频播放器的全局引用。</p>

<p>有时视频会启动,并且对于该 session 有好处,但重新启动应用程序,问题会再次出现。</p>

<p>我是移动开发和 JavaScript(以及 iOS、Cordova 等)世界的新手,但对开发不熟悉,是我做的事情顺序错误,还是我长期使用 Java 导致我要对 JavaScript 行为做出错误的假设吗?</p>

<p>哦,最后一个事实,代码在 BlackBerry 上运行良好,所以这肯定与 iOS 平台有关,但 5.1、6.0 和 6.1 在模拟器和设备上都失败了。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我无法找到问题的根源,所以如果其他人有这个问题,为了将来引用,我通过像这样动态构建所有东西来解决它:</p>

<pre><code>    // Get the place we will mount the video
    var home = $(&#34;#videoInsert&#34;);
    // Remove previous player, TODO Release first
    home.empty();

    // Create the new content
    var player = $(&#39;&lt;video&gt;&lt;/video&gt;&#39;);
    var videoId = &#34;video&#34; + playerCounter++;
    player.attr(&#34;id&#34;, videoId);
    player.attr(&#34;class&#34;, &#34;video-js vjs-default-skin noscroll&#34;);
    player.attr(&#34;controls&#34;, &#34;true&#34;);
    player.attr(&#34;autoplay&#34;, &#34;false&#34;);
    player.attr(&#34;preload&#34;, &#34;auto&#34;);
    player.attr(&#34;data-setup&#34;, &#34;{}&#34;);

    // Add the optional poster if supplied
    if (arguments.length &gt; 2) {
      player.attr(&#34;poster&#34;, posterUrl);
    }

    // Set the media up
    var media = $(&#34;&lt;source /&gt;&#34;);
    media.attr(&#34;src&#34;, &#34;file://&#34; + videoUrl);
    media.attr(&#34;type&#34;, mimeType);
    player.append(media);

    // Finally add the player to the page
    home.append(player);

    try {
      target = _V_(videoId, null, function() {
    log(&#34;Video ready&#34;);
    attachEventListeners(this);
    resize(this);
      });
    } catch (error) {
      dumpError(&#34;Problem with initialisation&#34;, error);
    }
</code></pre>

<p>HTML 和 JS 初始化似乎有些冲突,但纯 JS 初始化解决了这个问题。</p></p>
                                   
                                                <p style="font-size: 20px;">关于javascript - Video.js 在 iOS 上的文件加载期间停止,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15090890/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15090890/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: javascript - Video.js 在 iOS 上的文件加载期间停止