- 浏览: 1483216 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
2020年5月12日更新
出现错误
websocket Failed to execute 'send' on 'WebSocket': Still in CONNECTING state
参考:https://blog.csdn.net/bossxu_/article/details/102977802
原因是
pc.createOffer 的时候websocket还没建立完,socket.send出现问题,
把这段代码加到websocket.onopen事件里就好了:
去掉jquery的版本,直接使用textare的input事件
2020年5月13日更新:
node的server 改成 map的方式,
webrtc6.html
交互原理:https://www.cnblogs.com/cther/p/myPeerConnection.html
server.js
测试:
node server.js
一个浏览器打开:http://localhost:3000/
如果 看到connect的数字为 6
另一个浏览器打开:http://localhost:3000/?c=6
体验互相更改的文本
类似www.showmebug.com
出现错误
websocket Failed to execute 'send' on 'WebSocket': Still in CONNECTING state
参考:https://blog.csdn.net/bossxu_/article/details/102977802
原因是
pc.createOffer 的时候websocket还没建立完,socket.send出现问题,
把这段代码加到websocket.onopen事件里就好了:
去掉jquery的版本,直接使用textare的input事件
2020年5月13日更新:
node的server 改成 map的方式,
webrtc6.html
交互原理:https://www.cnblogs.com/cther/p/myPeerConnection.html
<html> <head></head> <body> this connection is :<span id="conn"></span> <div id="conn_show"> <a id="conn_link" href="#">call me</a> </div></br> <textarea id="dataChannelSend" >please change me</textarea> <script> window.onload = function () {//dont use jquery console.log("onload---->"); var el = document.getElementById('dataChannelSend'); el.addEventListener('input',function () { console.log("input"); sendData(); }); el.addEventListener('propertychange',function () {//兼容IE console.log("property"); sendData(); }); } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i<vars.length;i++) { var pair = vars[i].split("="); if(pair[0] == variable){return pair[1];} } return(false); } var this_conn = parseInt(Math.random() * 10); console.log("connnnnn:"+this_conn); console.log("getQueryVariable:"+getQueryVariable('c')); var isCaller =getQueryVariable("c"); var socket = new WebSocket("ws://127.0.0.1:3000"); var myrole = "callee"; if(isCaller){//第一个链接显示可以拨打我,第二个链接显示我在拨打 myrole = "caller"; this_conn=isCaller; document.getElementById("conn_show").innerText="I am a caller"; }else{ document.getElementById("conn_link").href="http://localhost:3000?c="+this_conn; document.getElementById("conn_link").target="_blank"; } document.getElementById("conn").innerText=this_conn; socket.onopen = function(){ // modify by hao 2020.05.12 console.log("websocket opening --->"); socket.send(JSON.stringify({ //"name":"123", "name":this_conn, "role":myrole, "event": "connect",//add by hao "data": {} })); if(isCaller){ console.log("------->createOffer"); pc.createOffer(function(desc){ // console.log(desc); pc.setLocalDescription(desc); console.log("---------------->pc.setLocal"); socket.send(JSON.stringify({ "name":this_conn, "role":myrole, "event": "_offer", "data": { "sdp": desc } })); }, function (error) { console.log('Failure callback: ' + error); }); }else{ } } socket.onmessage = function(event){ var json = JSON.parse(event.data); //console.log('onmessage: ', json); //如果是一个ICE的候选,则将其加入到PeerConnection中,否则设定对方的session描述为传递过来的描述 if( json.event === "_ice_candidate" ){ pc.addIceCandidate(new RTCIceCandidate(json.data.candidate)); } else { pc.setRemoteDescription(new RTCSessionDescription(json.data.sdp)); console.log("---------------->pc.setRemote"); // 如果是一个offer,那么需要回复一个answer if(json.event === "_offer") { console.log("------->createAnswer"); pc.createAnswer(function(desc){ pc.setLocalDescription(desc); console.log("---------------->pc.setLocal"); socket.send(JSON.stringify({ // "name":"123", "name":this_conn, "role":myrole, "event": "_answer", "data": { "sdp": desc } })); }, function (error) { console.log('Failure callback: ' + error); }); }else{ console.log("------->receive Answer---('"+json.event+"')"); } } }; var iceServer = null; var pc = new webkitRTCPeerConnection(iceServer,{optional: [{RtpDataChannels: true}]}); try { sendChannel = pc.createDataChannel('sendDataChannel',{reliable: true}); } catch (e) { alert('createDataChannel() failed with exception: ' + e.message); } sendChannel.onopen = console.log('--Send channel open state is : ' +sendChannel.readyState); sendChannel.onclose = console.log('--Send channel close state is: ' +sendChannel.readyState); // 发送ICE候选到其他客户端 pc.onicecandidate = function(event){ console.log("onicecandidate----------->"); if (event.candidate !== null) { console.log("event.candidate != null"); socket.send(JSON.stringify({ // "name":"123", "name":this_conn, "role":myrole, "event": "_ice_candidate", "data": { "candidate": event.candidate } })); }else{ console.log("event.candidate == null"); } }; sendChannel.onmessage = function(event) { console.log("-sendChannel.onmessage--★★★★★"); document.getElementById('dataChannelSend').value = event.data; }; // pc.ondatachannel = function(event) { // console.log("-ondatachannel--★★★★★---ondatachannel"); // }; function sendData() { var data = document.getElementById('dataChannelSend').value; console.log("---->>>>sendData():"+data); sendChannel.send(data); } </script> </body> </html>
server.js
//http://www.blogjava.net/linli/archive/2014/10/21/418910.html var express = require('express'), app = express(), server = require('http').createServer(app); server.listen(3000); app.get('/', function(req, res) { res.sendFile(__dirname + '/webrtc6.html'); }); var WebSocketServer = require('ws').Server, wss = new WebSocketServer({server: server}); ws_map = new Map(), wss.on('connection', function(ws) { // console.log('connection:'); console.log('connection:\t'+JSON.stringify(ws,null,'\t')); ws.on('message', function(message) { var json = JSON.parse(message); console.log('conn map length: ' + ws_map.size ); console.log("json:"+json.event+",name:"+json.name+",role:"+json.role); var thisrole = "callee"; var wsname; if(json.role!=null && json.role == "caller"){ wsname=json.name+"callee"; }else{ wsname=json.name+"caller"; } if(json.event != 'connect'){ console.log("wsname:"+wsname); var otherwx = ws_map.get(wsname); if(otherwx){ otherwx.send(message, function (error) { if (error) { console.log('Send message error (' + desc + '): ', error); } }); }else{ console.error("error:not find the connection:"+wsname); } }else{ console.log("will add "+json.name+json.role); ws_map.set(json.name+json.role,ws) } }); });
测试:
node server.js
一个浏览器打开:http://localhost:3000/
如果 看到connect的数字为 6
另一个浏览器打开:http://localhost:3000/?c=6
体验互相更改的文本
类似www.showmebug.com
发表评论
-
srt学习笔记一:srt的helloworld
2020-03-27 19:13 8441。无服务的方式:udp, 2。srs作为服务端:rtmp推收 ... -
ios的safari使用自制ca证书测试webrtc
2018-08-20 13:31 2476这个需要注意 https://stackoverflow.c ... -
webrtc学习笔记九 (datachannel在jslinux的应用,java版本)
2015-10-15 17:45 2549目标:使用java的websocket作为datachannl ... -
webrtc学习笔记七(datachannel在jslinux的应用,nodejs版本)
2015-10-09 15:34 882目标: 两个浏览器的jslinux可以进行数据交互 fa ... -
webrtc学习笔记六(datachannel+websocket)
2015-10-03 00:12 16202020年5月12日更新 5年前的例子又不好使了, 出现错误 ... -
webrtc学习笔记五(视频流和datachannel一起使用的例子)
2015-09-30 23:57 38062020年5月9日更新,5年前 ... -
webrtc学习笔记四(获取真实的ip)
2015-09-28 14:47 4091<script> function getI ... -
webrtc学习笔记三(截屏快照)
2015-09-25 14:46 2282需要注意的问题: sizeCanvas这个方法帮助解决的 ch ... -
webrtc学习笔记二(datachannel)
2015-09-24 17:57 2508https://www.webrtc-experiment.c ... -
webrtc学习笔记一 (视频流)
2015-09-24 17:39 4513google官方的 socket.io的源码 https:// ...
相关推荐
### WebRTC学习笔记_Demo收集 #### 一、WebRTC现状与历史背景 WebRTC(Web Real-Time Communication)是一项开放的、免费的技术框架,旨在使Web浏览器能够在无需插件的情况下进行实时音视频通信。该技术最初由...
这篇“webrtc学习笔记一”主要关注的是视频流处理,是WebRTC技术中的核心部分。在深入讨论之前,先了解一下WebRTC的基本架构和组成部分。 1. **基础概念**: - **Peer Connection**: 是WebRTC的核心组件,负责...
WebRTC(Web Real-Time Communication)是一项核心技术,允许网页浏览器实现实时的音频、视频通信,无需用户安装额外的插件。这项技术源自谷歌对GlobalIP Solutions公司的收购,它包含了一系列的组件,旨在构建一个...
在"WebRTC学习笔记01-最简单实现一对一视频通讯代码"中,我们将探讨WebRTC的基础知识以及如何通过简单的代码实现一对一视频通话。 首先,WebRTC的核心组件包括: 1. **RTCPeerConnection**:这是WebRTC中最关键的...
使用WebRTC进行录音和播放可能会遇到的问题包括:网络延迟、同步问题、编码解码兼容性、音频质量控制等。解决这些问题需要对网络协议、音频处理和WebRTC架构有深入了解。 8. 开发流程: 一般来说,开发这样一个...
Webrtc源码开发笔记1 —Webrtc视频编码打包流程模块图解 梳理webrtc从transceiver到transport流程,从而宏观上了解webrtc视频采集,编码,打包发送等相关流程与相关模块的对应关系,为开发和快速定位问题提供参考。
使用WebRTC实现了最简单的语言聊天 详见博客:http://blog.csdn.net/caoshangpa/article/details/53889057
WebRTC 学习资源
赶上 pion/rtp v1.6.2RTCP:webrtc-rs/rtcp同步到pion/rtcp/v1.2.4完成:赶上 pion/rtcp v1.2.6SRTP:webrtc-rs/srtp同步到pion/srtp/v1.5.2完成:赶上 pion/srtp/v2 v2.0.2DTLS:webrtc-rs/dtls同步到pion/dtls/v...
webrtc 272489源码系列(27之7),内含depot_tools、vs2013工程文件。 自解压文件,需要下载此系列其他26个文件后解压。
webRTC的AEC实例,可直接运行,便于初学者学习了解webRTC。
WebRTC(Web Real-Time Communication)是一种开放的网络通信框架,允许网页浏览器进行实时通信,无需插件或额外软件。在本项目中,我们将探讨如何利用WebRTC-Streamer来实现直播功能,前端则采用Vue3技术栈。 ...
WebRTC 是一个支持网络浏览器进行实时语音对话或视频对话的软件架构。...《Learning WebRTC 中文版》适合有一定HTML 和JavaScript 经验,希望了解WebRTC 并想学习实时通信工作原理的开发者参考阅读。
总的来说,这份“中文版WebRTC教程”将带你走进WebRTC的世界,通过详细的学习和实践,你可以掌握实时通信技术,为开发互动性强、体验优秀的Web应用打下坚实的基础。无论是在线教育、远程医疗还是实时协作工具,...
WebRTC(Web Real-Time Communication)是一种开放的网络标准,它允许在浏览器之间进行实时通信,无需插件或第三方软件。这个技术广泛应用于视频聊天、在线会议、直播播放等领域。在这个场景下,我们讨论的是一个...
学习并使用"SimpleWebRTC-master"这个示例,开发者可以更好地理解WebRTC的工作原理,从而快速地开发出自己的音视频应用。通过阅读和调试代码,你可以了解如何整合上述各个组件,实现端对端的通信功能,尤其在内网...
2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于...
**正文** WebRTC(Web Real-Time Communication)是Google推出的...通过阅读《WebRTC零基础开发者教程.pdf》这份文档,你可以系统地学习WebRTC的各个方面,并通过实例操作加深理解,逐渐成为一名熟练的WebRTC开发者。
WebRTC(Web Real-Time Communication)是一种开放的网络通信框架,用于实现浏览器之间的实时音视频通信。在Windows操作系统下搭建WebRTC...同时,学习和理解WebRTC的交互报文机制对于开发和调试WebRTC应用至关重要。