百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

b站视频是如何播放的

yuyutoo 2025-01-02 20:11 3 浏览 0 评论

上次我们聊 B 站视频为什么播放那么快是利用了视频分片技术,提前将视频分成很多小片,这样就可以实现播放的时候只加载播放位置的视频,只需要加载那一小段就可以了。

这样就可以达到快速播放的目的了。那么我没你拿到视频片段,怎么播放呢?

今天就来研究下。

浏览器的 SourceBuffer 的 API

首先,浏览器本身有一个叫做 SourceBuffer 的 API。我们去看他的官方文档解释。

SourceBuffer 接口标识通过 MediaSource 对象传递到 HTMLMediaElement 并播放的媒体分块。它可以由一个或者多个媒体片段组成。

这样在用的时候,我们把视频的地址,传入到这个媒体对象中去。

这样等到视频一部分一部分下载好之后,就可以直接拼接上去。因为这个媒体对象有个 appendBuffer 方法。

Bash
 sourceBuffer.appendBuffer(buf);

看代码是否有SoufceBuffer这个对象

我们直接在控制台搜索代码,果然有这个对象。

基本可以断定,b 站就是通过这个对象来实现网页的视频播放的。

服务端怎么存储视频片段

我们网页下载这些视频片段,那么服务器段就要存,所以服务器要先把视频以某个格式存储好,一个一个片段文件。这样就可以一部分一部分下载。

看b 站使用一种叫 m4s 的格式存储的。

相关推荐

国内外注塑机及电脑密码大全(常见注塑机通用密码)

一、国外注塑机(日本、德国等)东洋注塑机万能码:9422345日精注塑机密码:222|7777DAMEG注塑机密码:000000000新泻注塑机密码:241650|261450住友注塑机密码:...

并发编程实战来咯(并发编程的艺术和并发编程实战)

提到并发编程,就不得不提C++ConcurrencyinAction(SecondEdition)(《C++并发编程实战第2版》)啦!《C++并发编程实战第2版》英文原版&中文译版看到这个...

无锁队列Disruptor原理解析(无锁队列应用场景)

队列比较队列...

理解 Memory barrier(内存屏障)(内存屏障 volatile)

...

并发编程 --- CAS原子操作(cas概念、原子类实现原理)

...

无锁CAS(附无锁队列的实现)(cas是一种无锁算法)

本文所有代码对应的Github链接为:https://github.com/dongyusheng/csdn-code/tree/master/cas_queue...

Linux高性能服务器设计(linux 服务器性能)

C10K和C10M计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,DanKegel提出了著名的C10问题:一台服务器上同时...

浅谈Go语言的并发控制(go语言 并发)

前言本文原创,著作权归...

Datenlord |Etcd 客户端缓存实践(etcd 数据存储)

简介和背景...

无锁编程——从CPU缓存一致性讲到内存模型

缓存是一个非常常用的工程优化手段,其核心在于提升数据访问的效率。缓存思想基于局部性原理,这个原理包括时间局部性和空间局部性两部分:...

打通 JAVA 与内核系列之 一 ReentrantLock 锁的实现原理

...

如何利用CAS技术实现无锁队列(cas会锁总线吗)

linux服务器开发相关视频解析:...

Kotlin协程之一文看懂Channel管道

概述Channel类似于Java的BlockingQueue阻塞队列,不同之处在于Channel提供了挂起的send()和receive()方法。另外,通道Channel可以...

详解C++高性能无锁队列的原理与实现

1.无锁队列原理1.1.队列操作模型...

Javascript 多线程编程的前世今生

...

取消回复欢迎 发表评论: