HTML5中的websocket实现直播功能

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

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

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

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

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

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

录像页面HTML结构


录像页面js

//创建一个+实例
var socket = new WebSocket("ws://" + document.domain + ":8080");

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

//返回一个用于在画布上绘图的环境。
var backcontext = back.getContext('2d');

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

var success = function(stream) {

//获取视屏流,转换为url
video.src = window.URL.createObjectURL(stream);

}

//打开socket
socket.onopen = function() {

draw();

console.log("open success")

}

// 将视频帧绘制到Canvas对象上,Canvas每100ms切换帧,形成肉眼视频效果
var draw = function() {

try {

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

} catch(e) {

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

return setTimeout(draw, 100);

} else {

throw e;

}

}

if (video.src) {

// Canvas的内容转化成PNG data URI并发送到服务器,0.5为和压缩系数
socket.send(back.toDataURL("image/jpeg", 0.5));

}

setTimeout(draw, 100);

}

//调用设备的摄像头,并将资源放入video标签
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||

navigator.mozGetUserMedia || navigator.msGetUserMedia;

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

直播页面HTML结构:

直播页面JS

//创建一个socket实例
var receiver_socket = new WebSocket("ws://" + document.domain + ":8008");
alert("ws://" + document.domain + ":8008")
var image = document.getElementById('receiver');
// 监听消息
receiver_socket.onmessage = function(data)
{
image.src = data.data;
}

总结

以上所述是小编给大家介绍的HTML5中的websocket实现直播功能,希望对大家有所帮助。在此也非常感谢大家对编程之家网站的支持!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码
HTML5使用DOM进行自定义控制
使用HTML5 Canvas绘制阴影效果的方法
使用PHP和HTML5 FormData实现无刷新文件上传
如何解决HTML5 虚拟键盘出现挡住输入框的问题
HTML5中div和section以及article的区别分析
html5和CSS 实现禁止IOS长按复制粘贴功能
html5 touch事件实现触屏页面上下滑动
canvas 模拟实现电子彩票刮刮乐的代码
HTML5 Plus 实现手机APP拍照或相册选择图片上传的功能
Android自定义环形LoadingView效果
HTML5 canvas绘制五角星的方法
html5使用html2canvas实现浏览器截图
使用Canvas处理图片的方法介绍
利用Canvas模仿百度贴吧客户端loading小球的方法