video.js 视频直播前端展示

15 篇文章 0 订阅
1 篇文章 0 订阅

原理

视频直播的流程原理图如下:
这里写图片描述
大致过程(摘自知乎:https://www.zhihu.com/question/37887655/answer/104444735):

流程如下:


1.数据采集:
摄像机及拾音器收集视频及音频数据,此时得到的为原始数据
涉及技术或协议:
摄像机:CCD、CMOS
拾音器:声电转换装置(咪头)、音频放大电路
2.前处理:
主要处理美颜、水印、模糊等效果。美颜功能几乎是直播的标配功能
3.数据编码:
使用相关硬件或软件对音视频原始数据进行编码处理(数字化)及加工(如音视频混合、打包封装等),得到可用的音视频数据
涉及技术或协议
编码方式:
⑴:CBR
⑵:VBR
编码格式:
⑴:视频:H.265、H.264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等
⑵:音频:G.711μ、AAC、Opus等,封装有MP3、OGG、AAC等
4.解码数据:
使用相关硬件或软件对接收到的编码后的音视频数据进行解码,得到可以直接显示的图像/声音
涉及技术或协议:
一般对应的编码器都会带有相应的解码器,也有一些第三方解码插件等
5.播放显示:
在显示器(电视、监视屏等)或扬声器(耳机、喇叭等)里,显示相应的图像画面或声音
涉及技术或协议:
显示器、扬声器等

所用协议介绍:
1、RTMP(Real Time Messaging Protocol,实时消息传送协议)
2、RTSP(Real Time Streaming Protocol,实时流传输协议)
3、RTP(Real-time Transport Protocol,实时传输协议)

特别说明:以上是视频直播的一个大概技术开发介绍,本文不介绍上面的技术与协议,只介绍如何在通过第三方直播云平台(如京东直播云平台,阿里云直播云平台)获取到已经处理好的rtmp数据流后在web前端展示

开发

技术选择:video.js(这里选择v5.18.4版本,6.0版本以上就不支持flash了,所以不能用6.0以上版本)
传输流协议选择:rtmp

1.静态显示

html:

<script src="./custom/video/video.min.js"></script>
<link href="./custom/video/video-js.css" rel="stylesheet">



<video id="my-video" class="video-js" controls preload="auto" width="640" height="300"  
 poster="http://ppt.downhot.com/d/file/p/2014/08/12/9d92575b4962a981bd9af247ef142449.jpg" data-setup="{}">  
    <source src="rtmp://live.hkstv.hk.lxdns.com/live/hks" type="rtmp/flv">  
    <p class="vjs-no-js">播放视频需要启用 JavaScript,推荐使用支持HTML5的浏览器访问。  
      To view this video please enable JavaScript, and consider upgrading to a web browser that  
      <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>  
    </p>  
 </video>  

2.动态显示

html:

<script src="./custom/video/video.min.js"></script>
<link href="./custom/video/video-js.css" rel="stylesheet">

<video id="container" class="video-js vjs-big-play-centered"  width="700" height="450" controls preload="auto"></video>

js:

//初始化视频
let player = videojs('container',{
  //像data-setup那样设置的参数
},function onPlayerReady(){
  //视频播放器初始化完毕,就会调用这个回调函数
  this.src({
    src: "rtmp流地址",
    type:'rtmp/flv'
  });
});

3.动态刷新与重载

//刷新时需要先注销video.js,很重要,否则会报错
if($("#container").length > 0) {
    let player = videojs('container');
    player.dispose();
  }


//重载
let player =  videojs("container");  //初始化视频
//重置video的src
player.src({
  src: "新的rtmp流地址",
  type:'rtmp/flv'
});
player.load();
player.play();

参考

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
video.js是一个开源的HTML5视频播放器库,可以在网页上播放各种格式的视频。当我们在本地测试播放视频源时,有时候会遇到跨域的问题。 跨域是由浏览器的同源策略所导致的。同源策略要求浏览器只能请求同源下的资源,即域名、端口和协议必须完全一致。而当我们在本地测试时,视频源与当前网页的域名、端口和协议可能不一致,导致浏览器拒绝请求该资源。 要解决这个问题,可以在前端自己处理跨域。一种常见的方法是通过服务器端代理来解决跨域。 具体步骤如下: 1. 在本地搭建一个简单的服务器,可以使用Node.js的http模块或其他服务器技术。 2. 将视频源请求转发到该本地服务器上。 3. 在本地服务器上进行跨域请求,并将请求到的视频源返回给前端。 4. 在前端使用video.js播放返回的视频源。 这样做的原理是,由于浏览器对服务端的请求没有跨域限制,而本地服务器将视频源的请求转发到目标服务器上,然后将返回结果返回给浏览器,这样就绕过了浏览器的同源策略,实现了跨域请求。 需要注意的是,这种方式只适用于本地测试阶段,如果将网站部署到真实环境中,应该使用真实的服务器来处理跨域请求,而不是通过本地服务器来解决跨域问题。 总结起来,video.js本地测试播放视频前端自己处理跨域的方法是通过搭建一个本地服务器,并将视频源请求转发到该服务器上,然后在本地服务器上进行跨域请求,并将请求到的视频源返回给前端进行播放。这样就能够解决跨域的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值