我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解Web视频播放

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解Web视频播放

本篇内容主要讲解“如何理解Web视频播放”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Web视频播放”吧!

视频的构成

一个完整可播放的视频文件是由视频和音频两部分构成。视频和音频又有各自的封装格式(容器)和编码格式。

编码格式

常见的视频编码格式有:MPEG4、H.264、H.265等。

常见的音频编码格式有:MP3、AAC、WAV等。

封装格式

常见的视频封装格式有:MP4、FLV、mov、AVI、RMVB等。

先理解几个名词

就是影像动画中的最小单位的影像画面。一帧就是一张静止的图像。视频中的动画就是由多幅连续的帧画面构成。

帧率

帧率是以帧为单位的图像在显示器上出现的频率,也叫帧速率,单位:赫兹(Hz)。简单理解为每秒播放图片的数量。

码率

码率是比特率的俗称,是指每秒传送的比特数。

FFmpeg

FFmpeg是可以用来记录、转换数字视频和音频的一套计算机程序。FFmpeg是在linux下开发,所以天生跨平台。它对音视频编码格式的支持比较全面,能对视频的各个组成部分进行编码。

H264

通常被称之为H.264/AVC;是由国际标准化阻止和国际电信联盟共同提出的继MPEG4之后的新一代数字视频压缩格式。采用H.264压缩后的数据具有低码率、高质量图像、容错能力强、网络适应性强等优点。

MP4

MP4是一中标准的数字多媒体容器格式;用于音频、视频的压缩编码,也可以存储字幕和静止图像,同时能以流的方式进行网络传输。

fMP4(Fragmented MP4)

fMP4是基于MPEG-4 Part 12的流媒体格式,与MP4很相似。简单来说fMP4区别与MP4区别就是它能很好地适应流式播放。

浏览器播放视频

video标签播放

在浏览器播放视频,可以使用HTML5原生的video标签。但其播放的格式使用一定限制的,目前video只支持三种格式WebM、Ogg、MP4。

  • WebM:WebM 文件使用 VP8 视频编解码器和 Vorbis 音频编解码器

  • Ogg :Ogg 文件使用 Theora 视频编解码器和 Vorbis音频编解码器

  • MP4:MPEG 4文件使用 H264 视频编解码器和AAC音频编解码器

上面三种可以直接使用video播放:

<video id="video-box" class="lazy" data-src="//cloud.video.taobao.com/play/u/755731755/p/1/e/6/t/1/283631891407.mp4" controls width="400px" heigt="400px"></video>

在页面初始化完成后,video标签会将整个mp4文件下载到浏览器,完成后即可播放。但是当mp4文件较大时,缓存时间就比较长,播放体验不好。当然也可以使用video.js 来播放,这里就不赘述了。

播放HLS流

HLS(HTTP Live Streaming)是一个由Apple公司提出的基于HTTP的流媒体传输协议。视频的封装格式是TS,编码格式是H.264/ACC,除了定义TS视频文件本身,还定义了用来控制播放的m3u8文本文件。移动端大部分浏览器都支持,也就是说,你可以在移动端浏览器直接使用vedio标签直接加载一个m3u8文件播放视频或者直播。但在PC端只支持苹果的safari浏览器,其他浏览器想播放需要引入第三方库,如:hls.js:

<script class="lazy" data-src="https://cdn.jsdelivr.net/npm/hls.js"></script> <video id="video"></video> <script>   var video = document.getElementById('video');   var videoclass="lazy" data-src = 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8';   if (Hls.isSupported()) {     var hls = new Hls();     hls.loadSource(videoclass="lazy" data-src);     hls.attachMedia(video);     hls.on(Hls.Events.MANIFEST_PARSED, function() {       video.play();     });   } </script>

播放HLS流的逻辑很简单,首先根据提供的m3u8地址源通过HTTP请求获取到一级index文件内容如:

#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000 500kbps.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=774000 1000kbps.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=887000 500kbps.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7692000 1000kbps.m3u8

bandwidth 指定视频流的码率,每一个 #EXT-X-STEAM-INF 的下一行是二级index文件的路径,可以是相对路径或者是绝对路径。请求到的二级文件内容如:

#EXTM3U #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-TARGETDURATION:10 #EXTINF:10, 1000kbps-00001.ts #EXTINF:10, 1000kbps-00002.ts #EXTINF:10, 1000kbps-00003.ts #EXTINF:10, 1000kbps-00004.ts #EXTINF:10,  ... ... #EXT-X-ENDLIST

可以从二级文件中读取到ts文件的路径,同样可以是相对路径或者绝对路径。 #EXTINF 表示每个ts切片的时长。 #EXT-X-ENDLIST 是视频结束标志,如果有这个标志也表明该流不是一个直播流。

HLS播放的优势:

  • 可以使用http协议请求数据流

  • 可以切换不同的码率,实现无缝播放

劣势:

  • 延迟较高,实时性差,一般延迟在10s以上,不适合做直播

  • ts文件切片小且多,对存储和缓存都有一定的要求

播放FLV流

FLV(Flash Video)是一种网络视频格式,FLV只能基于flash播放,但是由于flash存在很多安全问题已经被众多厂商抛弃,现在我们如果要在H5中播放flv格式的视频流可以使用Blibli的开源库:Flv.js,flv.js原理是解析视频的flv流并实时转换为fmp4格式,再通过 Media Source Extension 喂给浏览器的 video 标签。

<script class="lazy" data-src="flv.min.js"></script> <video id="videoElement"></video> <script>     if (flvjs.isSupported()) {         var videoElement = document.getElementById('videoElement');         var flvPlayer = flvjs.createPlayer({             type: 'flv',             url: 'http://example.com/flv/video.flv'         });         flvPlayer.attachMediaElement(videoElement);         flvPlayer.load();         flvPlayer.play();     } </script>

基于Media Source Extensions播放视频流

我们经常在很多直播网站去看视频,你有没有注意到他们是用的什么流?我们去B站随便找一个直播或者视频打开控制台查看播放器,你会发现 video 标签的 class="lazy" data-src 居然是 blob 开头的一个 url 。在前面讲FLV播放时,我们提到了Media Source Extension ,本节将介绍这种基于MSE的直播方案。

如何理解Web视频播放

Media Source Extensions 是什么

媒体源扩展(Media Source Extensions,缩写MSE)是一项W3C规范,MSE允许Javascript为audio标签和video标签动态地构造媒体源。

借助MSE的能力,我们可以将接收到的实时流通过 blob url 往video标签中灌入二进制数据(如fmp4格式流),或者使用 canvas 来实现直播。

简单实现

首先,判断浏览器是否支持MediaSource:

const supportMediaSource = window.MediaSource &&             typeof window.MediaSource.isTypeSupported === 'function' &&             window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42c01f,mp4a.40.2"');

MediaSource支持情况:

如何理解Web视频播放

接下来新建 MediaSource 实例,并使用生成blob url 加到video标签。并且监听 sourceOpen 事件来判断初始化完成。

const mediaSource = new MediaSource(); const video = document.querySelector('#video-box'); video.class="lazy" data-src = URL.createObjectURL(mediaSource);  mediaSource.addEventListener('sourceopen',function(){     // TODO })

接下来我们通过websocket获取原始视频流,处理后通过 SourceBuffer 喂给 mediaSource

const sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'); const ws = new WebSocket("wss://xxx.websocket.com");  ws.onopen = function(evt) {    console.log("Connection open ...");    ws.send("fetch Data"); };  ws.onmessage = function(evt) {   // 可以在灌入数据前进行转码等操作   sourceBuffer.appendBuffer(evt.data); };  ws.onclose = function(evt) {   console.log("Connection closed."); };

通过MSE的方式我们可以将接收到的视频或者音频流进行端处理,配合WebWorker技术实现快速转码、支持多播,给我们想象空间。

H.265视频播放

H.265是ITU-T VCEG继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到设置。

但是由于浏览器不支持H265格式的流,所以我们无法直接播放。这时候可以使用MSE的方式在 sourceBuffer.appendBuffer(evt.data) 前将 evt.data 使用 libde265.js 等转码库转码后给到sourceBuffer。或者使用业界成熟的播放器进行播放,如淘系的@ali/videox播放器。

到此,相信大家对“如何理解Web视频播放”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解Web视频播放

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

windows播放器无法播放视频如何解决

如果你在Windows播放器中遇到无法播放视频的问题,可以尝试以下解决方案:1. 确保视频文件格式支持:检查视频文件的格式是否受到Windows播放器支持。如果视频文件是一个不受支持的格式,你可以尝试将其转换为受支持的格式或者使用其他播放器
2023-09-07

windows完美解码如何播放视频

本篇内容主要讲解“windows完美解码如何播放视频”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows完美解码如何播放视频”吧!完美解码播放视频的方法:1、首先下载一个完美解码,再安装
2023-07-04

mac无法播放视频如何解决

如果您的Mac无法播放视频,可以尝试以下解决方法:1. 更新操作系统:请确保您的Mac系统是最新版本。单击苹果菜单,选择“软件更新”来检查并更新您的系统。2. 更新浏览器:如果您遇到在浏览器中播放视频的问题,尝试更新您使用的浏览器到最新版本
2023-08-21

php视频不能播放如何解决

这篇文章主要介绍“php视频不能播放如何解决”,在日常操作中,相信很多人在php视频不能播放如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php视频不能播放如何解决”的疑惑有所帮助!接下来,请跟着小编
2023-07-04

windows7不能播放视频如何解决

有几种可能的解决方法可以尝试:1. 更新视频播放器:确保你正在使用的视频播放器是最新版本。你可以尝试使用Windows Media Player或VLC等常用的播放器。2. 更新显卡驱动程序:打开设备管理器,找到显示适配器,右键单击并选择“
2023-10-08

Django如何实现视频播放

这篇文章主要讲解了“Django如何实现视频播放”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django如何实现视频播放”吧!view视图import reimport osimport
2023-06-30

如何在html中播放视频

本篇文章为大家展示了如何在html中播放视频,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html播放视频在 HTML 中播放视频并不容易!您需要谙熟大量技巧,以确保您的视频文件在所有浏览器中(In
2023-06-15

电脑自带播放器无法播放视频如何解决

这篇文章主要介绍“电脑自带播放器无法播放视频如何解决”,在日常操作中,相信很多人在电脑自带播放器无法播放视频如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”电脑自带播放器无法播放视频如何解决”的疑惑有所
2023-06-27

Android如何实现播放视频

这篇文章将为大家详细讲解有关Android如何实现播放视频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、通过intent的方式,调用系统自带的播放器 Uri uri = Uri.parse("/st
2023-05-31

potplayer播放视频没有声音如何解决

本篇内容介绍了“potplayer播放视频没有声音如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!potplayer播放视频没有声音的
2023-07-01

win11播放本地视频卡死如何解决

播放本地视频卡死的问题可能是由于以下原因导致的:1. 视频文件损坏或格式不受支持。2. 视频解码器缺失或过时。3. 播放器软件有问题或需要更新。4. 硬件设备或驱动程序问题。以下是一些解决方法:1. 检查视频文件:确保视频文件没有损坏,尝试
2023-09-07

WinForm中如何播放音频或视频文件

在WinForm中播放音频或视频文件可以使用Windows Media Player控件,以下是一个简单的示例代码:using System;using System.Windows.Forms;namespace AudioVideo
WinForm中如何播放音频或视频文件
2024-04-08

windows播放器无法播放视频怎么解决

如果Windows播放器无法播放视频,可以尝试以下解决方法:1. 确保视频文件格式受支持:Windows播放器不支持所有视频文件格式。确保您的视频文件是Windows播放器支持的格式,如MP4、AVI、WMV等。2. 更新Windows播放
2023-09-11

jQuery如何监听视频播放事件?

jQuery视频播放事件jQuery提供了丰富的事件监听方法来捕捉视频播放的各个阶段,包括播放、暂停、结束和更新时间。这些事件可以触发定制脚本,以便控制播放器控件、更新UI、发出请求或记录事件。还可访问有关播放时间、总时长和播放速度等有用信息。
jQuery如何监听视频播放事件?
2024-04-08

html5中video如何停止播放视频

这篇文章主要介绍html5中video如何停止播放视频,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!html5 video停止播放视频的方法:首先使用“document.getElementById("id值")”获
2023-06-15

编程热搜

目录