美文网首页
android webrtc 两个手机 P2P 视频聊天

android webrtc 两个手机 P2P 视频聊天

作者: lesliefang | 来源:发表于2020-11-16 18:12 被阅读0次
webrtc.jpg

webrtc 很简单,核心流程就是上面这张图。唯一需要我们实现的就是 signal sever。当然信令交换一般都是走 websocket ,我用 netty 写了一个简单的 websocket 服务。

@Override
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
    JSONObject jsonObject = JSON.parseObject(msg.text());
    String event = jsonObject.getString("event");
    if ("register".equals(event)) {
        // 注册
        String userId = jsonObject.getString("userId");
        if (!userMap.containsKey(userId)) {
            ctx.channel().attr(userIdKey).set(userId);
            userMap.put(userId, ctx.channel());
            logger.info("user {} 上线", userId);
        }
    } else if ("sdp".equals(event) || "trickle".equals(event)) {
        // sdp 和 ICE trickle 消息根据接收者直接转发给对方
        logger.info("收到消息 {} {}->{} <<== {}",
                event,
                jsonObject.getString("sender"),
                jsonObject.getString("receiver"),
                jsonObject.toString());
        String receiver = jsonObject.getString("receiver");
        if (receiver != null && userMap.containsKey(receiver)) {
            msg.retain();
            userMap.get(receiver).writeAndFlush(msg);
            logger.info("转发消息 {} {}->{} ==>> {}",
                    event,
                    jsonObject.getString("sender"),
                    jsonObject.getString("receiver"),
                    jsonObject.toString());
        }
    }
}

首先通信双方都要通过 websocket 连接到服务器,之后 ws 就可以转发信令消息了。信令就是通信双方协商通讯细节的一个过程,你用什么协议都行 http 或 websocket 或其它协议。 信令格式你随便定义,只要你能让双方通信就行。

webrtcp2p.jpg

我写死了两个用户,一个 aaaa, 一个 bbbb, 一个手机装 aaaa 用户, 另外一个手机装 bbbb 用户。

final String LOCAL_USER_ID = "bbbb";
final String RECEIVER_USER_ID = "aaaa";

很神奇没多少代码就实现了两端 P2P 聊天。

iceServerList.add(new PeerConnection.IceServer("stun:stun.l.google.com:19302"));

由于这里我使用了 google 的 stun 服务器, 局域网内测试没有问题,理论上你把 websocket 信令服务部署到公网,公网上两端也是可以通信的(未测试) 。
只是一个 demo 走通了流程,各种情况,各种异常等都没有处理。

signal server: https://github.com/lesliebeijing/WebrtcSignalingDemo
源码: https://github.com/lesliebeijing/WebRtcDemo

相关文章

  • android webrtc 两个手机 P2P 视频聊天

    webrtc 很简单,核心流程就是上面这张图。唯一需要我们实现的就是 signal sever。当然信令交换一般都...

  • webrtc

    使用WebRTC搭建前端视频聊天室——入门篇使用WebRTC搭建前端视频聊天室——信令篇Android之WebRTC介绍

  • android webrtc 多人网状P2P视频聊天

    什么是网状P2P?假设3个人视频会议,每个人都要同时接收2路流,上传两路流。每个客户端要创建多个(N-1个)Pee...

  • Android WebRTC开发中的音视频采集

    语音通话和视频通话,我的实现方式是使用WebRTC。WebRTC它是基于P2P的一项技术。 底层封装了UDP/IP...

  • 收集的一些流媒体文章

    游戏实时语音解决方案是怎么炼成的 WebRTC-Android 源码导读(三):视频硬编码实现分析 WebRTC手...

  • Android WebView 使用腾讯X5 WebView 加

    最近公司在 Android 端进行点对点视频通话,PC-Android,使用的是 webrtc ,所以 Andro...

  • WebRTC Android API

    WebRTC Android API WebRTC For Android相关的API有VideoCapturer...

  • 2020-09-09

    WebRTC 直播视频会议: 核心模块 p2p 连接 传输数据 响应控制指令robotjs(Node.js)C++...

  • 能力要求

    熟悉视频编码体系和相关的技术,ffmpeg 、MediaCodec (Android)、webRTC、x264、f...

  • webrtc 运行机制

    一路音频就是一路轨 媒体流。包含很多轨 音频轨 视频轨 字幕轨 webrtc p2p传输 p2p 打通穿透 穿透是...

网友评论

      本文标题:android webrtc 两个手机 P2P 视频聊天

      本文链接:https://www.haomeiwen.com/subject/xhyzbktx.html