metaRTC4.0与浏览器webrtc的P2P音视频对讲demo

概述

metaRTC4.0新版本支持webrtc版的p2p,支持一对一和一对多应用,在应用中浏览器作为终端应用比较广,metaRTC提供有metaRTC和浏览器p2p通信demo,工程为metap2p4_html。

metartc4.0新版本支持和浏览器进行音视频和datachannel双向通信,实现和浏览器进行音视频对讲功能。

remark:浏览器demo在谷歌浏览器测试成功,其他浏览器还没测试。

metap2p4_html工程demo

  1. p2pdemo_zb.html  从metap2p4只拉流和datachannel双向通信
  2. p2pdemo_hd.html  和metap2p4音视频对讲,简单的p2p视频会议,datachannel双向通信

下载源码

 

Release metartc4.016 with 3rdparty and runtime · metartc/metaRTC · GitHubWebrtc SDK for pure C. Contribute to metartc/metaRTC development by creating an account on GitHub.https://github.com/metartc/metaRTC/releases/tag/4.0.016https://gitee.com/metartc/metaRTC/releases/4.0.016icon-default.png?t=M4ADhttps://gitee.com/metartc/metaRTC/releases/4.0.016

p2pdemo_hd.html操作

 p2pdemo_zb.html

 

p2pdemo_hd.html代码

 function start_play(){
        let elr = document.getElementById("resilution");
        let res = elr.options[elr.selectedIndex].text.match(/\d+/g);
        let h = parseInt(res.pop());
        let w = parseInt(res.pop());
		let urlstr=document.getElementById('streamUrl').value.replace("webrtc:","http:");
		//urlstr="http://127.0.0.1/index/api/webrtc?app=live&stream=test&type=echo";
        player = new ZLMRTCClient.Endpoint(
                {
                    element: document.getElementById('video'),// video 标签
                    debug: true,// 是否打印日志
                    zlmsdpUrl:urlstr,//流地址
                    simulcast:false, 
                    useCamera:true, //使用摄像头
                    audioEnable:true,  //是否有语音
                    videoEnable:true,//是否有视频
                    recvOnly:recvOnly,
                    resolution:{w:w,h:h},//分辨率
                    usedatachannel:true,//是否启用datachannel
                }
            );
    
            player.on(ZLMRTCClient.Events.WEBRTC_ICE_CANDIDATE_ERROR,function(e)
            {// ICE 协商出错
                console.log('ICE 协商出错')
            });
    
            player.on(ZLMRTCClient.Events.WEBRTC_ON_REMOTE_STREAMS,function(e)
            {//获取到了远端流,可以播放
                console.log('播放成功',e.streams)
            });
    
            player.on(ZLMRTCClient.Events.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED,function(e)
            {// offer anwser 交换失败
                console.log('offer anwser 交换失败',e)
                stop();
            });
    
            player.on(ZLMRTCClient.Events.WEBRTC_ON_LOCAL_STREAM,function(s)
            {// 获取到了本地流
    
              document.getElementById('selfVideo').srcObject=s;
              document.getElementById('selfVideo').muted = true;
              
                //console.log('offer anwser 交换失败',e)
            });

            player.on(ZLMRTCClient.Events.CAPTURE_STREAM_FAILED,function(s)
            {// 获取本地流失败
    
              console.log('获取本地流失败')
            });

            player.on(ZLMRTCClient.Events.WEBRTC_ON_CONNECTION_STATE_CHANGE,function(state)
            {// RTC 状态变化 ,详情参考 https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionState
              console.log('当前状态==>',state)
            });

            player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_OPEN,function(event)
            {
              console.log('rtc datachannel 打开 :',event)
            });

            player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_MSG,function(event)
            {
              console.log('rtc datachannel 消息 :',event.data)
              document.getElementById('msgrecv').value = event.data
            });
            player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_ERR,function(event)
            {
              console.log('rtc datachannel 错误 :',event)
            });
            player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_CLOSE,function(event)
            {
              console.log('rtc datachannel 关闭 :',event)
            });
      }

参数设置代码

   player = new ZLMRTCClient.Endpoint(
                {
                    element: document.getElementById('video'),// video 标签
                    debug: true,// 是否打印日志
                    zlmsdpUrl:urlstr,//流地址
                    simulcast:false,
                    useCamera:true, //使用摄像头
                    audioEnable:true,  //是否有语音
                    videoEnable:true,//是否有视频
                    recvOnly:recvOnly,
                    resolution:{w:w,h:h},//分辨率
                    usedatachannel:true,//是否启用datachannel
                }
            );

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
WebRTC(Web Real-Time Communication)是一种用于在网页浏览器之间实现实时音视频通信的开放标准。它允许开发者通过使用Web浏览器和简单的JavaScript API来实现高质量的实时通信,无需任何插件或扩展程序。 要实现WebRTC的实时音视频功能,您可以参考WebRTC的示例代码和文档。示例代码可以帮助您了解如何创建一个简单的实时音视频功能的页面。在开始之前,您可以先了解一些实时音视频推拉流相关的基础概念,比如流、推流、拉流和房间。 流是一组按指定编码格式封装的音视频数据内容。一个流可以包含几个轨道,比如视频和音频轨道。推流是将采集阶段封包好的音视频数据流推送到实时音视频云的过程。拉流是从实时音视频云将已有音视频数据流拉取播放的过程。房间是用于组织用户群的音视频空间服务,同一房间内的用户可以互相收发实时音视频及消息。 在使用WebRTC实现实时音视频功能之前,用户需要先登录某个房间,然后才能进行音视频推流和拉流操作。用户只能收到自己所在房间内的相关消息,比如用户进出、音视频流变化等。 如果您对WebRTC实时音视频开发感兴趣,还可以领取免费的音视频开发学习资料,内容包括FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs等。这些资料可以帮助您更深入地学习和了解音视频开发,并提供一个学习路线图供您参考。 总结起来,要实现WebRTC的实时音视频功能,您可以参考WebRTC的示例代码和文档,了解实时音视频推拉流的基本概念,以及学习音视频开发的相关资料。通过这些资源,您可以逐步掌握WebRTC实时音视频的实现方法和技术细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

metaRTC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值