PeerDart: 简单的点对点通信,基于 WebRTC

PeerDart 提供了一个完整、可配置且易于使用的点对点 API,该 API 构建在 WebRTC 之上,支持数据通道和媒体流。

PeerDart 模仿了 peerjs 的设计。文档请 在此 查看。

状态

  • Alpha:开发中
  • 公开 Alpha:可供测试。但请对我们宽容些,会有 bug 和缺失的功能。
  • 公开 Beta:稳定。此版本预计不会有破坏性更改,但可能存在 bug。
  • 公开:生产就绪

实时示例

以下是一个同时使用媒体和数据连接的示例应用程序:示例

设置

创建 Peer

final Peer peer = Peer("pick-an-id");
// You can pick your own id or omit the id if you want to get a random one from the server.

数据连接

联系

const conn = peer.connect("another-peers-id");
conn.on("open", null, (ev,_) => {
	conn.send("hi!");
});

接收

peer.on("connection", null, (ev, _) => {
	conn.on("data", null, (event, _) => {
		// Will print 'hi!'
		console.log(event.eventData);
	});
	conn.on("open", null, () => {
		conn.send("hello!");
	});
});

媒体呼叫

呼叫

final mediaStream = await navigator.mediaDevices
        .getUserMedia({"video": true, "audio": false});

    final conn = peer.call("peerId", mediaStream);

    conn.on("stream", null, (ev, _) {
        _localRenderer.srcObject = ev.eventData as MediaConnection
        // Do some stuff with stream
});

接听

peer.on("call", null, (ev, context) async {
    final call = ev.eventData as MediaConnection;
    final mediaStream = await navigator.mediaDevices
        .getUserMedia({"video": true, "audio": false});

    call.answer(mediaStream);

    call.on("stream", null, (ev, _) async {
    _localRenderer.srcObject = mediaStream;
    _remoteRenderer.srcObject = ev.eventData as MediaStream

    // Do some stuff.
    });
});

支持

同时支持移动和 Web 浏览器(已测试 Chrome)。

链接

文档 / API 参考

PeerServer

许可证

PeerDart 在 MIT 许可证下授权。

GitHub

查看 Github