HTML5中的websocket实现直播

1、 videojs-contrib-hls 直播功能
        github:https://github.com/videojs/videojs-contrib-hls

<script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script>
        android、IOS下需m3u8格式直播地址

webkit等PC浏览器下需videojs-flash支持播放trmp
2.

https://blog.csdn.net/qq_39364032/article/details/79744309

做视频直播这一块,前期研究了很多方案,包括websocket,因为各种原因最后没有采取这个方案,但还是想记录一下学习的心得。

WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过send()方法来向服务器发送数据,并通过onmessage事件来接收服务器返回的数据。

做的过程中,主要的思维是:在录像页面利用setTimeout()每隔固定的时间通过canvas将视频转化为一帧一帧的图像,然后用websocket的socket.send()将图片数据发送给服务器。在直播页面就是先创建一个<img>的结构,通过websocket的socket.onmessage()获取到图像数据,并展示<img>标签上,形成直播。

附上代码

录像页面HTML结构

 
  1. <video autoplay id="sourcevid" style="width:1600;height:900px"></video>

  2. <canvas id="output" style="display:none"></canvas>

录像页面js

 
  1. <script type="text/javascript" charset="utf-8">

  2. //创建一个+实例

  3. var socket = new WebSocket("ws://"+document.domain+":8080");

  4. var back = document.getElementById('output');

  5. //返回一个用于在画布上绘图的环境。

  6. var backcontext = back.getContext('2d');

  7. var video = document.getElementsByTagName('video')[0];

  8. var success = function(stream){

  9. //获取视屏流,转换为url

  10. video.src = window.URL.createObjectURL(stream);

  11. }

  12. //打开socket

  13. socket.onopen = function(){

  14. draw();

  15. console.log("open success")

  16. }

  17. // 将视频帧绘制到Canvas对象上,Canvas每100ms切换帧,形成肉眼视频效果

  18. var draw = function(){

  19. try{

  20. backcontext.drawImage(video,0,0, back.width, back.height);

  21. }catch(e){

  22. if (e.name == "NS_ERROR_NOT_AVAILABLE") {

  23. return setTimeout(draw, 100);

  24. } else {

  25. throw e;

  26. }

  27. }

  28. if(video.src){

  29. // Canvas的内容转化成PNG data URI并发送到服务器,0.5为和压缩系数

  30. socket.send(back.toDataURL("image/jpeg", 0.5));

  31. }

  32. setTimeout(draw, 100);

  33. }

  34. //调用设备的摄像头,并将资源放入video标签

  35. navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||

  36. navigator.mozGetUserMedia || navigator.msGetUserMedia;

  37. navigator.getUserMedia({video:true, audio:false}, success, console.log);

  38. </script>

直播页面HTML结构:

<img id="receiver" style="width:1600px;height:900px"/>

直播页面JS

 
  1. <script type="text/javascript" charset="utf-8">

  2. //创建一个socket实例

  3. var receiver_socket = new WebSocket("ws://"+document.domain+":8008");

  4. alert("ws://"+document.domain+":8008")

  5. var image = document.getElementById('receiver');

  6. // 监听消息

  7. receiver_socket.onmessage = function(data)

  8. {

  9. image.src=data.data;

  10. }

  11. </script>

HTML5中的websocket图片直播相关推荐

  1. html直播源码,HTML5中的websocket实现直播功能

    做视频直播这一块,前期研究了很多方案,包括websocket,因为各种原因最后没有采取这个方案,但还是想记录一下学习的心得. WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双 ...

  2. HTML5中的websocket实现直播

    https://blog.csdn.net/qq_39364032/article/details/79744309

  3. HTML5中的WebSocket

    背景 在传统方式下,很多网站为了实现即时通讯,所用的技术都是轮询.轮询是在特定的的时间间隔(如每1秒),由浏览器对伺服器发出HTTP request,然后由伺服器返回最新的数据给客户端的浏览器.这种传 ...

  4. HTML5中的webSocket、ajax、http

    本文原链接:https://cloud.tencent.com/developer/article/1115496 https://cloud.tencent.com/developer/articl ...

  5. dw html5中怎么设置图片自动切换,DW制作九宫格全屏亮灯轮播图片且自动切换图片教程...

    本文介绍的是利用DW制作九宫格全屏亮灯轮播图片并且可以自动切换图片,而且点击图片时还会亮灯,推荐过来,大家一起来学习吧! 软件名称:Adobe Dreamweaver CS3 官方中文安装版软件大小: ...

  6. html5中如何让图片向下移动,如何调整HTML5的图像移动

    我事先不搞清楚如何格式化这个正确如何调整HTML5的图像移动 我转换包含按钮和非常简单的动作脚本为HTML5文件的Flash SWF道歉.我上传的.html和使用iframe代码我在网上找到把它在我的 ...

  7. html5中如何放图片,css怎么放图片?

    随着互联网的发展,网速不断提升,我们现在的网页也变的更加丰富起来,除了能够传输文字外,我们还可以传输图片.我们该如何使用css在网页中放图片?下面我们俩看一下使用css在网页中放图片的方法. css可 ...

  8. html5中的img图片属性

    <img src="  "   alt="  "> 解释:src是图片路径, alt是用来设置图片发生错误时显示的替换文字.eg: title是用来 ...

  9. html5中怎么把图片放大,HTML5中,如何为图片制作放大镜效果?

    在文档中显示缩略图, 通过getComputedStyle来获取缩略图大小, 并映射成真实大小的图片尺寸; 给缩略图添加mouseon事件, 当鼠标处在缩略图上时显示放大镜元素; 反之则移除 给缩略图 ...

最新文章

  1. swoole mysql 协程_Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
  2. Linux Kernel TCP/IP Stack — Socket Layer
  3. CSS---网络编程
  4. 数据库查询语言SQL概念
  5. 汉字为什么能流传至今_汉字能流传至今,比毛不易还不易,它的同龄字统统都死掉了...
  6. 建筑与计算机技术,建筑设计中常用的计算机技术与注意点
  7. arch linux 安装xfce_华为荣耀Magicbook安装Manjaro系统指北
  8. Java操作某方法时报错:java.lang.NoSuchMethodError
  9. 江西6地列入国家智慧城市试点 智慧城市啥模样专家来描绘
  10. 使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=属性,不能使用selected...
  11. node.js安装和vue全局安装教程
  12. 九宫格日记-2013年02月23日
  13. 秒杀功能设计思想 php,seckill-system-php
  14. Python爬取堆糖网图片的代码
  15. obj[key].obj['key'],obj.key的区别
  16. 飞行CSS3导航菜单
  17. 【Bootstrap】<前端框架>Bootstrap布局容器栅格网格系统
  18. 一日一技:用Python绘画有多好玩
  19. 一个故事,一段代码告诉你如何使用不同语言(GolangC#)提供相同的能力基于Consul做服务注册与发现
  20. 利用pdf2image,将pdf文件转换成图片

热门文章

  1. NTP时间同步服务器报错:no server suitable for synchronization found
  2. 数据包头分析---网络字节序与主机字节序
  3. post postman 传值_postman参数传递
  4. XSLT - 利用template实现for循环
  5. CMake编译Widget UI Qt程序
  6. android studio annotations,AndroidAnnotations在Android Studio中的配置
  7. 软件测试沟通技巧,你到底应该如何沟通:沟通的技巧
  8. 我眼中未来的计算机作文600字,我的电脑作文600字
  9. quo,vadis_Quo Vadis JUnit
  10. 字节跳动_掌握Java字节码