基于点对点视频通话技术WebRTC的demo,包含网页端和安卓端Android,中继服务器IceServer/TurnServer搭建,信令服务器SignalingServer源码

第一步:搭建中继服务器

 

#(必填)不知道啥用,不写会有个log报错,但是不影响服务
cli-password=xxx

#(选填)指定侦听的端口(默认3478时不用写)
#listening-port=3478

#(选填)指定云主机的公网IP地址(端口转发(映射)网络一定要写,比如阿里云,局域网不用写)
#external-ip=0.0.0.0

#(必填)访问stun/turn服务的用户名和密码
user=aaaaaa:bbbbbb

#(必填)按照格式可以乱写
realm=xxx.xxx.xxx

第二步:测试中继服务器

 

第三步:启动信令服务器(网页端放在一起了)

using CommonUtils;
using WebSocketSharp;

namespace SignalingServerAndWebClient
{
    public static class SignalingServer
    {
        static WebSocketServer _server;

        public static void Start()
        {
            _server = new WebSocketServer(Config.WsUrl);
            if (_server.IsSecure)
            {
                var pfxBytes = FileUtil.GetBytes(PathUtil.GetFull("configs/nobug.today.pfx"));
                var pfxPassword = FileUtil.GetText(PathUtil.GetFull("configs/nobug.today.pwd"));
                _server.AddCertificate(pfxBytes, pfxPassword);
            }
            _server.OnSessionConnect += OnSessionConnect;
            _server.OnSessionReceiveMessage += OnSessionReceiveMessage;
            _server.OnSessionDisconnect += OnSessionDisconnect;
            _server.Start();
        }

        private static void OnSessionConnect(WebSocketServerSession session)
        {
            _server.SendTo(new { type = "open", session = session.ID }, session);
        }

        private static void OnSessionReceiveMessage(MessageEventArgs args, WebSocketServerSession session)
        {
            //LogUtil.Print("OnSessionReceiveMessage: " + args.Data);
            var data = JsonUtil.ParseToJObject(args.Data);
            data.Put("session", session.ID);

            if (data.ContainsKey("target"))
            {
                var target = data.GetString("target");
                _server.SendTo(data, target);
                return;
            }

            if (data.ContainsKey("targets"))
            {
                var targets = data.Get<string[]>("targets");
                var dataString = data.ToJson(true);
                foreach (var target in targets)
                    _server.SendTo(dataString, target);
                return;
            }

            _server.SendExclude(data, session);
        }

        private static void OnSessionDisconnect(WebSocketServerSession session)
        {
            _server.SendExclude(new { type = "close", session = session.ID }, session);
        }
    }
}
//获取本地流,并连接信令服务器
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
navigator.getUserMedia(constraints, function (mediaStream) {
    log("获取本地摄像头视频");
    localVideo.srcObject = mediaStream;
    localMediaStream = mediaStream;
    //连接信令服务器
    connect();
}, log);

第四步:启动安卓端

    //主动发起
    public void createOffer() {
        amISender = true;
        peerConnection.createOffer(this, mandatoryMediaConstraints);
        log("尝试创建offer");
    }

    //被动接受
    public void loadOfferAndCreateAnswer(SessionDescription offer) {
        amISender = false;
        //HttpUtil.SendToDebugServer(offer);
        peerConnection.setRemoteDescription(this, offer);
        log("接收offer,设置为远端信息");
        peerConnection.createAnswer(this, mandatoryMediaConstraints);
        log("尝试创建answer");
    }

效果:

介于WebRTC技术流行度不高,技术较新,资料较少,本人耗费了大量精力才完成了此demo,所以...

由于WebRTC一直在更新,此demo可能会运行失败,但不影响其参考价值,本人会尽全力确保该demo的正常运行,有问题私信或评论留言。

下载后必读[使用说明]

demo下载地址:

demo-webrtc.zip-编解码文档类资源-CSDN下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

上海好程序员

给上海好程序员加个鸡腿!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值