【问题标题】:How to make an html5 player play without a source如何让 html5 播放器在没有源的情况下播放
【发布时间】:2018-07-28 12:51:37
【问题描述】:

我正在构建一个多媒体播放器,它需要控制一个页面上的多个其他多媒体播放器。为了做到这一点,我想在页面底部有一个区域,其中包含一个媒体播放控制器(包括一个搜索栏),它将控制页面上的所有其他播放器。例如,当用户点击播放按钮时,页面上的所有其他玩家都开始播放。

我想使用普通的视频/音频播放器,但我想要的不是播放真实内容,而是拥有控件,尤其是前进的搜索栏。不自己实现播放控件的原因是因为我想使用 video.js 插件的强大功能(例如时间轴上的事件标记)。

我设法显示了一个video.js播放器带有播放控件。此外,我设法设置了持续时间。问题是当我点击播放按钮或调用player.play() 时播放器不播放。

这是因为播放器没有媒体源。 video.js 和本机播放器不会在没有媒体源的情况下播放。

现在,有没有办法强制玩家在没有来源的情况下进行游戏?我可以让它认为它有一个吗?

谢谢,

【问题讨论】:

  • 您可以随时使用javascript来检查您的html5播放器是否有来源。如果没有,则 html5 播放器播放完视频。如果需要,我可以提供一个示例。
  • 您错过了所有要点,我不想有源,我想要一个可以在没有媒体源的情况下播放的播放器。这样我就可以获得多媒体播放器的功能,而无需拥有视频或音频内容。
  • 当您说“我想要一个可以在没有媒体源的情况下播放的播放器”时,您希望它播放什么?在我看来,如果您没有任何内容,则可以假设那个空的 html5 播放器 已播放完其内容。
  • 再次,我想使用多媒体播放器(搜索栏、播放按钮、暂停按钮等)的播放控件,该控件将控制多个其他播放器呈现在页面上。我不想自己实现功能,而是想使用浏览器的音频/视频播放器。显然我不能在没有任何内容的情况下制作播放器的搜索栏。 这是我的问题 - 我可以让视频/音频播放器在没有任何内容的情况下播放吗?
  • 在这种情况下,你不能。在这种情况下,最好的办法是通过 javascript(如果播放器没有源)为 html5 播放器 提供空白源(黑屏)。

标签: javascript html html5-video media-player video.js


【解决方案1】:

我想出了一个可行的解决方案。

再次目的是让 video.js 中的工作媒体控制器不加载任何媒体内容,最重要的控制器是搜索栏。

我一直在玩 video.js 并试图在不加载任何媒体内容的情况下使搜索栏前进,并发现调用 player.currentTime() 确实会更新 curretTime 内部成员但是不更新用户界面。

最终我发现为了让 video.js 更新 UI,我们需要触发 timeupdate 事件。

所以我决定实现一个可以控制所有其他播放器的假播放器,并使用 video.js 播放器作为他的 UI(仅显示媒体控件并隐藏视频)。

假玩家需要使用上面提到的精确计时器here

概念示例:

import videojs from 'video.js';

class MainMediaController {
    public static readonly INTERVAL = 250;

    protected _playerId: string;
    protected _duration: number;
    protected _mediaController: videojs.Player;
    protected _childPlayers: videojs.Player[];
    protected _currentTime: number;

    private _interval: number;
    private _intervalId: number;

    constructor(playerId: string, recordingDuration: number, childPlayers: videojs.Player[]) {
        this._playerId = playerId;          // id of the player at the bottom of the page which will be served as the main timeline
        this._duration = recordingDuration;
        this._interval = MainMediaController.INTERVAL;
        this._childPlayers = childPlayers;
        this._currentTime = 0;
}

    public async init() {
        this._mediaController = videojs(this._playerId);

        // await for ready state
        await new Promise((resolve, reject) => {
            this._mediaController.ready(() => {
                resolve();
            });
        });

        // set duration for a correct seek bar (longest.endTime - first.startTime)
        this._mediaController.duration(this._duration);
    }

    public play(){
        // update UI every 250ms
        this._intervalId = setInterval(this.intervalStep.bind(this), this._interval);

        for(let player of this._childPlayers){
            player.play();
        }
    }

    private intervalStep(){
        this._currentTime += 0.250;                          // 250ms
        this._mediaController.currentTime(this._currentTime);
        this._mediaController.trigger("timeupdate");         // trigger() is accessible don't worry
    }

    public pause(){...}
    public stop(){...}
    public seek(){...}
}

该解决方案让我可以在没有视频的主时间轴中使用 video.js 插件!!

【讨论】:

  • 我到处寻找类似的东西,但不幸的是我无法让你的代码工作。播放/暂停方法是如何触发的?主控仍然对我没有任何作用。谢谢!
【解决方案2】:

图像的原理相同。如果您没有某些内容的图片,则需要有一个备用计划:占位符图片。

你可以对视频做同样的事情。

最简单的解决方案是在你的项目目录中:

> placeholders
  |-- fakeVideo_short.mp4
  |-- fakeVideo-long.mp4
  |-- fakeAudio.mp3
  |-- ...

当你的上层媒体控制器发现一个空播放器时,你可以给它一个占位符内容。

这是一个简单的解决方案,可让您更快地专注于重要需求:媒体控制器

如何检测玩家是否需要占位符?

嗯:

  1. 每当玩家完成/消费某些内容时,如果没有更多可用内容,您可以为其提供一个占位符。
  2. 应用程序开始时,如果播放器的数量多于内容,您可以将空白内容(占位符)提供给空的播放器。

【讨论】:

  • 我不能每次都制作假视频。我想要实现的是一个同步多个多媒体文件的播放器。例如,要播放 4 个视频文件(假设它们都是在同一时间短暂录制的),您将它们加载到我的应用程序中,您将在矩阵下方获得一个矩阵和一个主媒体控制器。我想要的只是一个功能性媒体控制器,它将取自 video.js,一个带有搜索栏的控制器,可以在没有来自幕后的真实内容的情况下前进
  • 哦!无需拥有多个 fakeVideo 文件。您只需要一个视频文件,比如说 3 秒的黑屏,然后一遍又一遍地循环播放,直到有一些新内容可用。我过去使用过 video.js,我认为它不提供通过播放器控制多个视频的功能。您需要构建自己的媒体控制器(播放、停止等)。
  • 假设第一个视频在 00:03 开始​​,最后一个视频在 00:09 结束,在那个演员阵容中,我想要一个持续 00:12 秒的空白视频。如何加载 3 秒的空白视频并让播放器播放 12 秒?
  • 我觉得你应该把标题改成“如何在客户端模拟视频内容的连续流”或者再问一个视频长度的问题部分。您似乎想在实际上传的实时视频之间生成一些视频占位符。这个过程应该在服务器上完成,你的应用程序应该听它。这样,您只需要一名玩家。
猜你喜欢
  • 2011-10-27
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
相关资源
最近更新 更多