metaRTC新版本支持webrtc的P2P

概述

在webrtc终端数量比较少时的应用场景,p2p比SFU有较大优势,metaRTC新版本支持webrtc的P2P,支持一对一和一对多,信令服务和webrtc为纯C实现,可以应用在眼镜、嵌入式、手机、PC等多种终端,支持windows/linux/android,支持客户端和浏览器。

metap2p3是个p2p demo,实现了简易的类似srs和zlm的信令服务,支持一对多,相当于webrtc版本的ipc,metaplayer3和metaplayer3_android可直接连接,浏览器用srs的player例子,将ip换成metap2p3的ip即可。

metap2p3是支持全双工的,支持一个连接实现推拉流。

 下载源码

https://github.com/metartc/metaRTChttps://github.com/metartc/metaRTChttps://github.com/metartc/metaRTCmetaRTC: metaRTC为嵌入式版本的webrtchttps://gitee.com/metartc/metaRTChttps://gitee.com/metartc/metaRTC

git clone https://github.com/metartc/metaRTC.git
或者
git clone https://gitee.com/metartc/metaRTC.git

metap2p3

默认信令侦听端口为1985,如作为直播推流端,不需要任何操作,默认后台侦听信令,接收到信令后自动启动推流程序。

连接metap2p3

客户端

 metaplayer3和metaplayer3_android可直接连接

浏览器

浏览器用srs的浏览器播放代码即可

remark:注意浏览器跨域options请求

<!DOCTYPE html>
<html>
<head>
    <title>SRS</title>
    <meta charset="utf-8">
    <style>
        body{
            padding-top: 30px;
        }
    </style>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
    <script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
    <script type="text/javascript" src="js/adapter-7.4.0.min.js"></script>
    <script type="text/javascript" src="js/srs.sdk.p2p.js"></script>
    <script type="text/javascript" src="js/winlin.utility.js"></script>
    <script type="text/javascript" src="js/srs.page.js"></script>
  
</head>
<body>
<div class="container" width="100%" height="100%">
    <div class="form-inline">
        URL:
        <input type="text" id="txt_url" class="input-xxlarge" value="webrtc://127.0.0.1:1985/live/livestream">
        <button class="btn btn-primary" id="btn_play">播放视频</button>
    
    </div>

    <video id="rtc_media_player" width="100%" height="100%" autoplay></video>   
</div>
<script type="text/javascript">
$(function(){
    var sdk = null; // Global handler to do cleanup when replaying.
     $('#rtc_media_player').show();
    var startPlay = function() {
       

        // Close PC when user replay.
        if (sdk) {
            sdk.close();
        }
        sdk = new SrsRtcPlayerAsync();

        // https://webrtc.org/getting-started/remote-streams
        $('#rtc_media_player').prop('srcObject', sdk.stream);
            var url = $("#txt_url").val();
       // parse_webrtc(url);
        sdk.play(url).then(function(session){
    
        }).catch(function (reason) {
            sdk.close();
 
        });
    };

    $("#btn_play").click(function() {
        $('#rtc_media_player').prop('muted', false);
        startPlay();
    });

});
</script>
</body>
</html>

srs.sdk.p2p.js修改部分代码

    // Internal APIs.
    self.__internal = {
        defaultPath: '/rtc/v1/play/',
        prepareUrl: function (webrtcUrl) {
            var urlObject = self.__internal.parse(webrtcUrl);
			var schema="http:";
            var port = urlObject.port || 1985;
            if (schema === 'https:') {
                port = urlObject.port || 443;
            }

            // @see https://github.com/rtcdn/rtcdn-draft
            var api = urlObject.user_query.play || self.__internal.defaultPath;
            if (api.lastIndexOf('/') !== api.length - 1) {
                api += '/';
            }

            apiUrl = schema + '//' + urlObject.server + ':' + port + api;
            for (var key in urlObject.user_query) {
                if (key !== 'api' && key !== 'play') {
                    apiUrl += '&' + key + '=' + urlObject.user_query[key];
                }
            }
            // Replace /rtc/v1/play/&k=v to /rtc/v1/play/?k=v
            var apiUrl = apiUrl.replace(api + '&', api + '?');

            var streamUrl = urlObject.url;

            return {
                apiUrl: apiUrl, streamUrl: streamUrl, schema: schema, urlObject: urlObject, port: port,
                tid: Number(parseInt(new Date().getTime()*Math.random()*100)).toString(16).substr(0, 7)
            };
        },

猜你喜欢

转载自blog.csdn.net/m0_56595685/article/details/123978131
P2P