我有一个将实时流嵌入其中的应用程序。为了应付延迟,我想知道流的当前时间戳是多少,并将其与服务器上的时间进行比较。
到目前为止,我已经测试过的是检查视频的缓冲时间与视频的当前时间之间的时差:
player.bufferedEnd() - player.currentTime()
但是我想与服务器比较时间,为此,我需要获取最后请求的.ts文件的时间戳。
所以,我的问题是使用video.js,是否存在某种挂钩来获取最后请求的.ts文件的时间戳?
Video.js版本:7.4.1
我设法解决了这个问题,但是请您忍受,我不记得在哪里找到了这段代码的文档。
就我在Angular应用程序中工作而言,我有一个视频组件负责使用video.js加载实时流。无论如何,让我们看一些代码...
视频初始化
private videoInit() {
this.player = videojs('video', {
aspectRatio: this.videoStream.aspectRatio,
controls: true,
autoplay: false,
muted: true,
html5: {
hls: {
overrideNative: true
}
}
});
this.player.src({
src: '://some-stream-url.com',
type: 'application/x-mpegURL'
});
// on video play callback
this.player.on('play', () => {
this.saveHlsObject();
});
}
private saveHlsObject() {
if (this.player !== undefined) {
this.playerHls = (this.player.tech() as any).hls;
// get and syncing server time...
// make some request to get server time...
// then calculate difference...
this.diff = serverTime.getTime() - this.getVideoTime().getTime();
}
}
// access the player's playlists, get the last segment and extract time
// in my case URI of segments were for example: 1590763989033.ts
private getVideoTime(): Date {
const targetMedia = this.playerHls.playlists.media();
const lastSegment = targetMedia.segments[0];
const uri: string = lastSegment.uri;
const segmentTimestamp: number = +uri.substring(0, uri.length - 3);
return new Date(segmentTimestamp);
}
因此,最重要的是getVideoTime
功能。可以在段URI中找到段的时间,以便该函数从段URI中提取时间,然后将其转换为Date对象。现在说实话,我不知道此URI格式是HLS的标准还是为我要连接的特定流设置的。希望这会有所帮助,对不起,我没有更多具体信息!