当前位置: 首页 > news >正文

永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放

永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放

1、H5播放webrtc,现在各大浏览器已经逐渐加大对WebRTC技术的支持,成都视开信息科技视频团队开发webrtc视频播放方案,我们已经实现了webrtc的视频推流,播放webrtc流。

this.pc = new RTCPeerConnection(null);
this.pc.ontrack = (event) => {
    this._mediaElement['srcObject'] = event.streams[0];
};
this.pc.addTransceiver('audio', {direction: 'recvonly'});
this.pc.addTransceiver('video', {direction: 'recvonly'});

this.sendChannel = this.pc.createDataChannel('keepalive');
this.sendChannel.onclose = this.onChannelClose.bind(this);
this.sendChannel.onopen = this.onChannelOpen.bind(this);
this.sendChannel.onmessage = this.onChannelMessage.bind(this);

this.pc.createOffer({
    offerToReceiveVideo: !0,
    offerToReceiveAudio: !0
}).then((offer) => {
    return this.pc.setLocalDescription(offer).then(() => {
        return offer;
    });
}).then((offer) => {
    return new Promise((resolve, reject) => {
        this.HttpPost(url, window.btoa(offer.sdp)).then((res) => {
            resolve(res);
        }, function (rej) {
            reject(rej);
        });
    });
}).then((answerSdp) => {
    return this.pc.setRemoteDescription(new RTCSessionDescription({
        type: 'answer',
        sdp: window.atob(answerSdp)
    }));
}).then(() => {
    this._isLoad = true;
}).catch((reason) => {
    throw reason;
});

2、拉流端

(1)、ontrack回调中将媒体播放地址,绑定到video上。
(2)、createOffer方法,这个方法返回本地会话描述。
(3)、setLocalDescription方法。
(4)、需要先与推流段建立一个连接。HttpPost(),发送:offer.sdp 到推流端,推流端服务器收到offer.sdp,再返回回来。
HttpPost(url, data) {
    return new Promise((resolve, reject) => {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = () => {
            if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 300)) {
                var respone = xhr.responseText;
                xhr.onreadystatechange = new Function;
                xhr = null;
                resolve(respone);
            }
        };

        xhr.open('POST', url.replace('webrtc', 'http'), true);
        xhr.send(data);
    });
}
(5)、收到应答返回的offer.sdp, 设置为你的远端连接。
this.pc.setRemoteDescription(new RTCSessionDescription({
    type: 'answer',
    sdp: window.atob(answerSdp)
}));
(6)、监听 sendChannel.onopen 连接是否建立成功。
(7)、拉流的过程中需要徐亚与服务器保持连接,可以 sendChannel.send(msg)来保持持续拉流 。
(8)、服务器推流,前端开始播放。

的过程中需要徐亚与服务器保持连接,可以 sendChannel.send(msg)来保持持续拉流 。

(8)、服务器推流,前端开始播放。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eU5m6sZL-1661916059662)(./1.gif)]

相关文章:

  • JavaScript-HelloWorld、浏览器控制台使用、数据类型
  • Centos部署Docker
  • 视频剪辑教程自学技巧:关于正确的短视频剪辑流程分享
  • 30、三维表面重建-Convolutional Occupancy Network
  • Android 用户如何将Room根据不同账户动态分库方案
  • 539、RabbitMQ详细入门教程系列 -【100%消息投递消费(一)】 2022.08.31
  • 基于信贷业务的量化风险评估简述
  • 项目经理如何做好任务分解,制定项目计划
  • 高级JAVA面试题详解(一)——CurrentHashMap、HashMap、HashTable的区别
  • Dart 2.18 发布,Objective-C 和 Swift interop
  • learn threejs (最小化例子)
  • Flask学习(四)-------蓝图
  • 牛客多校2 - Ancestor(LCA,前后缀)
  • 【毕业设计】深度学习垃圾分类系统 - 机器视觉
  • Linux 编写shell脚本记录操作用户日志信息
  • [deviceone开发]-do_Webview的基本示例
  • DOM的那些事
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • javascript从右向左截取指定位数字符的3种方法
  • PAT A1092
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 七牛云假注销小指南
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • k8s使用glusterfs实现动态持久化存储
  • Linux权限管理(week1_day5)--技术流ken
  • 回归生活:清理微信公众号
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #Spring-boot高级
  • (C++17) optional的使用
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (zt)最盛行的警世狂言(爆笑)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (五)网络优化与超参数选择--九五小庞
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 托管代码与非托管代码
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET的数据绑定
  • .net连接MySQL的方法
  • @ModelAttribute使用详解
  • [Angular] 笔记 21:@ViewChild
  • [codevs1288] 埃及分数
  • [Django 0-1] Core.Handlers 模块
  • [HackMyVM]靶场 Quick3
  • [Leetcode] Permutations II
  • [LeetCode]剑指 Offer 42. 连续子数组的最大和
  • [loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治
  • [LWC] Components Communication
  • [MT8766][Android12] 取消WIFI热点超过10分钟没有连接自动关闭设定
  • [NOI2012]迷失游乐园
  • [NOIP2004] 提高组 洛谷P1090 合并果子
  • [Oh My C++ Diary]类继承和类组合(内嵌类)初始化的不同
  • [one_demo_11]二分查找法