WebRTC H5实现服务器转发的视频聊天

WebRTC H5实现服务器转发的视频聊天

说明:

  1. 此处使用到的WebRTC皆为H5的API,实际上调用的是封装在浏览器的WebRTC的库,用于获取实时视频数据,传输数据则是使用WebSocket实现。
  2. 其中的实例语法只用到原生JS,版本为ES6,可能需要较高版本的浏览器支持(IE一般不支持)。

1.获取音视频数据

方法:navigator.mediaDevices.getUserMedia

1.1前置条件

基于浏览器的安全策略,通过WebRTC(具体为getUserMedia)调用摄像头和麦克风获取音视频数据,只能是在HTTPS下的网页,或者是本地localhost下才能调用,需要先校验。

function validate(){
   
    var isSecureOrigin = location.protocol === 'https:' ||
            location.hostname === 'localhost';
    if (!isSecureOrigin) {
        alert('getUserMedia() must be run from a secure origin: HTTPS or localhost.' +'\n\nChanging protocol to HTTPS');
        location.protocol = 'HTTPS';
    }
}

1.2初始化

直接获取音视频,一般默认是前置摄像头。

var constraints = {
    audio: true, 
    video: true  //设置为false则只获取音频
};

还可以设置视频的其他参数,此处设置视频的分辨率,min和max为分辨率的最值,ideal为理想值,浏览器会先尝试找到最接近指定的理想值的设定或者摄像头(如果设备拥有不止一个摄像头),但不保证。下面是获取分辨率为640*480的视频。

var constraints = {
    audio: true,
    video: {  width: { min: 640, ideal: 640, max: 640 },  height: { min: 480, ideal: 480, max: 480 }}
};

初始化

//链式操作,then和catch是并列关系
navigator.mediaDevices.getUserMedia(constraints)
    .then(handleSuccess)
    .catch(handleError);

1.3处理音视频数据

此时返回的只是一个流对象,包括了原始的音视频数据,不能直接操作,需要后续的MediaRecorder封装才能处理。

function handleSuccess(stream) {
   
    log('getUserMedia() got stream: ', stream);

    //stream即为返回成功的结果,设置为全局便于的后续上传操作
    window.stream = stream;

    //显示在页面上
    var recordedVideo = document.querySelector('video#recorded');
    recordedVideo.srcObject = stream;
    recordedVideo.onloadedmetadata = function(e) {
   
        log("Label: " + stream.label);
        //音轨,PCM
        log("AudioTracks" , stream.getAudioTracks());
        //视频图像
        log("VideoTracks" , stream.getVideoTracks());
    };
}

function handleError(error) {
   
    console.log(
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
WebRTC(Web Real-Time Communication)是一个开放标准的实时通信技术,可以在浏览器之间直接立音视频通信,无需任插件或额外的软件。要WebRTC实现视频聊天,你可以WebRTC提供的Web API。 以下是一些实现视频聊天的基本步骤: 1. 获取用户媒体设备:使用`getUserMedia`方法获取用户的音视频流。这个方法会请求用户授权访问摄像头和麦克风。 2. 建立Peer Connection:使用`RTCPeerConnection`对象来建立两个浏览器之间的连接。这个对象负责建立和管理音视频传输通道。 3. 信令传输:为了建立Peer Connection,你需要一个信令服务器来传递连接所需的信息。你可以使用WebSocket或者其他实时通信方式来传输信令。 4. 连接建立和ICE候选者收集:一旦Peer Connection建立,浏览器会开始收集ICE(Interactive Connectivity Establishment)候选者,这些候选者用于在两个浏览器之间建立点对点连接。 5. 建立数据通道:如果你需要在视频聊天中传输其他数据(如文本消息),你可以使用`RTCDataChannel`对象来创建一个可靠的双向数据通道。 6. 媒体流传输:通过Peer Connection的音视频传输通道,你可以将用户的音视频流进行传输和呈现。 注意,以上只是基本的步骤概述,实际的实现可能还涉及到一些其他的细节和处理逻辑。你可以参考WebRTC官方文档以及一些开源的WebRTC库和示例代码来更详细地了解和实现视频聊天功能。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值