Ĭ��
���� �������� 20
�뿪��IM�����Ʒ�¿ӣ����3���¹��ҿ�Դ����ߣ��������·��... ��վ�����㽨��
��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��
�Ķ���168339�� | ���ۣ�20�� �ղ�14 ����1 ��6
ɨһɨ��ע��

������΢ҽ�Ƽ����Ŷ�ǰ�˹���ʦ���������ԭ�⡰��0��1����һ�� WebRTC Ӧ�á�����ʱͨѶ�����޶��͸Ķ���


1������


ȥ�����ͻ���������¹ڷ������������¾�ҽ�����������жϣ��ڴ˱����£���������ģʽ���ٽ���˴��������ҽ������ȼü֮��������Ϊ������������Ҫ��һ������ҽ��֮�����Ƶ��������Ӧ����ʵʱ����Ƶ�����ŵ���ʵ�֡�

������֮��ʵʱ����Ƶ���켼���ż��ܸߣ�һ��Ĺ�˾Ҫ���ڶ�ʱ���ڴ��㲹���ⷽ��ļ����̰��൱���ѣ�����Դ����Ƶ����WebRTC�ṩ������һ���ݾ����������߹�˾�IJ�Ʒ���ڣ�ͬ���ǻ���WebRTC�����ŵ��Դ������

���Ľ����ڱ��߹�˾���������������Ʒ��WebRTC������ʵ�����飬��������λ���WebRTC���㿪��һ��ʵʱ����Ƶ���칦�������»��WebRTC�Ļ���֪ʶ������ԭ����ʼ�����ڿ�Դ����Ϊ����ʾ��δһ��WebRTCʵʱ����Ƶ���칦�ܡ�

��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_cover-opti.png

������ͬ�������ڡ���ʱͨѶ����Ȧ�����ںţ���ӭ��ע�����ں��ϵ������ǣ���˽�����

2������Դ��


����Դ�븽�����أ�
learn-webrtc-master(52im.net).zip (128.78 KB , ���ش���: 218 , �ۼ�: 1 ���)

�������
cd webrtc-server
yarn
npm start

cd webrtc-static
yarn
npm start

3��֪ʶ׼��


3.1����Ƶ���ۻ���


���˽�WebRTC����֮ǰ������������Ƶ�����Ļ������ۻ����˽�Ļ����������ȴ����¼�ƪ����������ѧһѧ��


3.2ʲô��WebRTC


��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_0.jpg
�� ͼƬ�����ԡ��˲����WebRTC����̬�������ƣ���ʵʱ����Ƶ�����ײ˻���

WebRTC��Web Real-Time Communication���� Google �� 2010 ���� 6820 ����Ԫ�չ� VoIP ���������� Global IP Solutions �� GIPS ���棬������Ϊ��WebRTC���� 2011 �꽫�俪Դ��ּ�ڽ���һ�������������֮�������Ƶ������ʵʱͨ�ŵ�ƽ̨������WebRTC����������˲����WebRTC����̬�������ƣ���ʵʱ����Ƶ�����ײ˻��������IJ���׸����

��ô WebRTC ����Щʲô�أ�

�������Ǵ��ÿ�춼���õ�΢�š�������qq���ഫͳ��IM�罻�����е�ʵʱ����Ƶͨ�����⣬���߹�˾��Ʒ���漰ҽ�������е���������/Զ������/Զ�̻������ʱ�½�Ϊ���еĻ���ֱ�������߽����ȳ���������֮�⣬������ 5G �Ŀ��ٽ��裬WebRTC ҲΪ����Ϸ�ṩ�˺ܺõļ���֧�š�

3.3WebRTC��ѧϰ��Դ


WebRTC�ٷ���Դ��


����WebRTCѧϰ��Դ��


4��WebRTC�������


����WebRTC ���������弼�����ͼ��
��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_1.png

����WebRTC���¿��Է�Ϊ���� 3 ���֣�

  • 1����ɫ�ṩ�� Web ǰ�˿���ʹ�õ� API��
  • 2����ɫʵ�߲����ṩ�������������ʹ�õ� API��
  • 3����ɫ���߲��ְ��� 3 ���֣���Ƶ���桢��Ƶ���桢���紫�� (Transport)���������Զ���ʵ�֡�

��ƪ�����ޣ����ڲ��������ۣ�����Ȥ���Զ�����WebRTCʵʱ����Ƶ����������ܹ���������

5��WebRTC��P2Pͨ��ԭ��


5.1P2Pͨ�ŵļ����ѵ�


P2Pͨ�ż���Ե�ͨ�š�

Ҫʵ��������ͬ���绷����������˷硢����ͷ�豸���Ŀͻ��ˣ������Dz�ͬ�� Web ����������ֻ� App��֮���ʵʱ����Ƶͨ�ŵ��ѵ��������Ҫ�����Щ���⣿

�ܽ�һ�£���Ҫ��������3�����⣺

  • 1����ô֪���˴˵Ĵ���Ҳ������η��ֶԷ���
  • 2���˴�����Ƶ�����������ι�ͨ��
  • 3������Ƶ������δ��䣬��ô���öԷ������Լ���

�������ǽ����������3�����⡣

5.2��ô֪���˴˵Ĵ��ڣ�Ҳ������η��ֶԷ�����


�������� 1��WebRTC ��Ȼ֧�ֶ˶Զ�ͨ�ţ������Ⲣ����ζ�� WebRTC ������Ҫ��������

��P2Pͨ�ŵĹ����У�˫����Ҫ����һЩԪ���ݱ���ý����Ϣ���������ݵȵ���Ϣ,����ͨ������һ���̽���������(signaling)����

��Ӧ�ķ������������������ (signaling server)����ͨ��Ҳ���˽�֮��Ϊ�����������������Ϊ���������Խ����˴˵�ý����Ϣ��������Ϣ��ͬ��Ҳ���Թ���������Ϣ��

���磺

  • 1��֪ͨ�˴� who �����˷��䣻
  • 2��who �뿪�˷���
  • 3�����ߵ��������������Ƿ������Ƿ���Լ��뷿�䡣

Ϊ�˱���������࣬������޶ȵ���������м����ļ����ԣ�WebRTC ��׼��û�й涨�������Э�顣�ڱ��ĺ����ʵ���½ڻ����� Koa �� Socket.io ����ʵ��һ�������������

5.3�˴�����Ƶ�����������ι�ͨ��


�������� 2����������Ҫ֪�����ǣ���ͬ�������������Ƶ�ı���������Dz�ͬ�ġ�

����: Peer-A ��֧�� H264��VP8 �ȶ��ֱ����ʽ���� Peer-B ��֧�� H264��VP9 �ȸ�ʽ��Ϊ�˱�֤˫����������ȷ�ı���룬��򵥵İ취��ȡ��������֧�ָ�ʽ�Ľ���-H264��

��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_x1.png

�� WebRTC �У���һ��ר�ŵ�Э�飬��ΪSession Description Protocol(SDP)������������������������Ϣ��

��ˣ���������ƵͨѶ��˫����Ҫ�˽�Է�֧�ֵ�ý���ʽ������Ҫ���� SDP ��Ϣ�������� SDP �Ĺ��̣�ͨ����֮Ϊý��Э�̡�

5.4����Ƶ������δ��䣬��ô���öԷ������Լ���


�������� 3���䱾���Ͼ�������Э�̵Ĺ��̣�����������Ƶʵʱͨ�ŵ�˫��Ҫ�˽�˴˵�����������������п����ҵ�һ���໥ͨѶ����·��

��������������ÿ��������ĵ��Զ����Լ���˽�й��� IP ��ַ�������Ļ��Ϳ���ֱ�ӽ��е�Ե����ӡ�

��ʵ���ϣ��������簲ȫ�� IPV4 ��ַ�����Ŀ��ǣ����ǵĵ��������֮�����С������ij���������ڣ���ҪNAT����Network Address Translation,�� ������Ϊ�������ַת���������� WebRTC ������ʹ�� ICE ���ƽ����������ӡ�

��ô��Ϊ ICE��

ICE (Interactive Connecctivity Establishment, ����ʽ���ӽ���)��ICE ����һ��Э�飬���������� STUN �� TURN ����Э��Ŀ�ܡ�

���У�STUN��Sesssion Traversal Utilities for NAT, NAT �Ự��ԽӦ�ó�������������λ�� NAT������� NAT����Ŀͻ����ҳ��Լ���Ӧ�Ĺ��� IP ��ַ�Ͷ˿ڣ�Ҳ�����׳Ƶ�P2P���򶴡���

���ǣ���� NAT �����ǶԳ��͵Ļ�����ô���޷��򶴳ɹ�����ʱ�� TURN �������ó��ˣ�TURN��Traversal USing Replays around NAT���� STUN/RFC5389 ��һ����չЭ����������������� Replay(�м�)���ܡ�

����˵����Ŀ�ľ��ǽ���Գ� NAT �޷���Խ�����⣬�� STUN ���乫�� IP ʧ�ܺ󣬿���ͨ�� TURN ������������ IP ��ַ��Ϊ�м̵�ַ��

�� WebRTC �����������͵� ICE ��ѡ�ߣ����Ƿֱ��ǣ�

  • 1��������ѡ������ʾ���DZ��ؾ������ڵ� IP ��ַ���˿ڡ�����������ѡ�������ȼ���ߵģ�Ҳ����˵�� WebRTC �ײ㣬���Ȼ᳢�Ա��ؾ������ڽ������ӣ�
  • 2�������ѡ������ʾ���ǻ�ȡ NAT ������������ IP ��ַ�Ͷ˿ڡ������ȼ����� ������ѡ�ߡ�Ҳ����˵�� WebRTC ���Ա������Ӳ�ͨʱ���᳢��ͨ�������ѡ�߻�õ� IP ��ַ�Ͷ˿ڽ������ӣ�
  • 3���м̺�ѡ������ʾ�����м̷������� IP ��ַ��˿ڣ���ͨ����������תý�����ݡ��� WebRTC �ͻ���ͨ��˫���޷���Խ P2P NAT ʱ��Ϊ�˱�֤˫����������ͨѶ����ʱֻ��ͨ����������ת����֤���������ˡ�

��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_2.png

����ͼ���ǿ��Կ������ڷDZ��ؾ������� WebRTC ͨ�� STUN server ����Լ������� IP �Ͷ˿ڣ�Ȼ��ͨ�������������Զ�˵� WebRTC ����������Ϣ��֮��˫���Ϳ��Գ��Խ��� P2P �����ˡ��� NAT ��Խ���ɹ�ʱ�����ͨ�� Relay server (TURN)��ת��

ֵ��һ����ǣ��� WebRTC ��������Ϣͨ����candidate��������������ͼ�е� STUN server �� Replay server Ҳ��������ͬһ�� server������ĩ��ʵ���½ڼ��Dz����˼����� STUN(��)�� TURN(�м�)���ܵĿ�Դ��Ŀ coturn��

���϶���������Ľ��ͣ����ǿ�������ͼ��˵�� WebRTC ��Ե�ͨ�ŵĻ���ԭ����

��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_3.png

�����֮������ͨ�� WebRTC �ṩ�� API ��ȡ���˵�ý����Ϣ SDP �Լ� ������Ϣ candidate ����ͨ������������������������������˵�����ͨ�����ʵʱ��Ƶ����ͨ����

PS���й�P2P�����֪ʶ����������ѧϰһ�����£�


6��WebRTC�ļ�����Ҫ��API


6.1����Ƶ�ɼ� API


����Ƶ�ɼ� API���� MediaDevices.getUserMedia()��

ʾ�����룺
const constraints = {
        video: true,
        audio: true
    
};
//   �ǰ�ȫģʽ����https/localhost���� navigator.mediaDevices �᷵�� undefined
try {
        const stream = await navigator.mediaDevices.getUserMedia(constraints);
        document.querySelector('video').srcObject = stream;
    }   catch (error) {
        console.error(error);
    }

6.2��ȡ����Ƶ�豸��������б�


��ȡ����Ƶ�豸��������б�API���� MediaDevices.enumerateDevices()��

ʾ�����룺
try {
        const devices = await navigator.mediaDevices.enumerateDevices();
        this.videoinputs = devices.filter(device => device.kind === 'videoinput');
        this.audiooutputs = devices.filter(device => device.kind === 'audiooutput');
        this.audioinputs = devices.filter(device => device.kind === 'audioinput');
      } catch (error) {
        console.error(error);
      }

6.3RTCPeerConnection


RTCPeerConnection ��Ϊ������Ե����ӵ� API,������ʵ������Ƶʵʱͨ�ŵĹؼ���

�ڱ��ĵ�ʵ���½��У���Ҫ���õ������·�����

ý��Э�̷�����


��Ҫ�¼���


���ϸ��½ڵ������п���֪�� P2P ͨ��������Ҫ��һ�����ھ��ǽ���ý����Ϣ��

ý��Э��ԭ����
��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_4.png

����ͼ���ѷ��֣�����ý��Э�̹��̿��Լ�Ϊ���������Ӧ�����ĸ�ý��Э�̷�����

�����ǣ�

  • 1�����ж� Amy ���� Offer(createOffer)���� offer ��Ϣ�������Ǻ��ж� Amy �� SDP ��Ϣ��ͨ��������������͸����ն� Bob,ͬʱ���� setLocalDesccription �����б��� SDP ��Ϣ�� Offer ����������
  • 2�����ն� Bob �յ��Զ˵� Offer ��Ϣ����� setRemoteDesccription ���������жԶ� SDP ��Ϣ�� Offer ���������������� Answer(createAnswer)���� Answer ��Ϣ�������ǽ��ն� Bob �� SDP ��Ϣ��ͨ��������������͸����ж� Amy��
  • 3�����ж� Amy �յ��Զ˵� Answer ��Ϣ����� setRemoteDesccription ���������жԶ� SDP ��Ϣ�� Answer ����������

���������������裬������� P2P ͨ�Ź����е�ý��Э�̲��֡�

ʵ���ϣ��ں��ж��Լ����ն˵��� setLocalDesccription ͬʱҲ��ʼ���ռ������Լ���������Ϣ(candidate)��Ȼ�����ͨ�������¼� onicecandidate �ռ������Ե� candidate ��ͨ��������������͸��Զˣ�������ͨ P2P ͨ�ŵ�����ͨ������ͨ������ onaddstream �¼��õ��Է�����Ƶ�����������������Ƶͨ�����̡�

7�����ֱ���ʵ��


��ʾ���������漰������Դ�룬��ӱ��ġ�2������Դ����һ�ڵĸ������ء�

7.1coturn �������Ĵ


ע�⣺���ֻ�DZ��ؾ��������������� [url=%5Burl=https://github.com/coturn/%5Dcoturn[/url]]coturn[/url] �������������Ҫ���������ڴ coturn ������֮ǰ����Ҫ����һ̨�������Լ���֧�� https ���ʵ������������DZ����Լ���Ĺ��̣�����Ȥ�Ŀ��Բ���������ʵ��һ�Ρ�

coturn �������Ĵ��Ҫ��Ϊ�˽�� NAT �޷���Խ�����⡣

�䰲װҲ��Ϊ�򵥣�

1. git clone [url=https://github.com/coturn/coturn.git]https://github.com/coturn/coturn.git[/url]
2. cd coturn/
3. ./configure --prefix=/usr/local/coturn
4. make -j 4
5. make install
// ���� key
6. openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes 

7.2coturn ��������


�ҵ��������£�
vim /usr/local/coturn/etc/turnserver.conf

listening-port=3478
external-ip=xxx.xxx // ����������� IP
user=xxx:xxx // �˺�: ����
realm=xxx.com // �������

7.3���� coturn ����


�ҵ��������̣�
1. cd /usr/local/coturn/bin/
2. ./turnserver -c ../etc/turnserver.conf
// ע�⣺�������ڵ� TCP �� UDP �� 3478 �˿ڶ�Ҫ����

7.4ʵ������


�ڱ�д����֮ǰ����������½� WebRTC ��Ե�ͨ�ŵĻ���ԭ�������Եó���������ͼ��

��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_5.png

��ͼ�в��ѿ��������� PeerA Ϊ���𷽣�PeerB Ϊ���շ�Ҫʵ�� WebRTC ��Ե��ʵʱ����Ƶͨ�ţ�����(Signal)�������DZ�Ҫ�ģ��Թ���������Ϣ�Լ�ת��������Ϣ��ý����Ϣ�ġ�

�ڱ����������� koa �� socket.io ��������������
// server �� server.js
const Koa = require('koa');
const socket = require('socket.io');
const http = require('http');
const app = new Koa();
const httpServer = http.createServer(app.callback()).listen(3000, ()=>{});
socket(httpServer).on('connection', (sock)=>{
    // ....
});

// client �� socket.js
import io from 'socket.io-client';
const socket = io.connect(window.location.origin);
export default socket;

�ڴ������������󣬽������ͼ�������²��衣

����1��PeerA �� PeerB �˷ֱ���������������������������¼������Ϣ��
// server �� server.js
socket(httpServer).on('connection', (sock)=>{
    // �û��뿪����
    sock.on('userLeave',()=>{
        // ...
    });
    // ��鷿���Ƿ�ɼ���
    sock.on('checkRoom',()=>{
        // ...
    });
    // ....
});
// client �� Room.vue
import socket from '../utils/socket.js';

// ����˸�֪�û��Ƿ�ɼ��뷿��
socket.on('checkRoomSuccess',()=>{
        // ...
});
// ����˸�֪�û��ɹ����뷿��
socket.on('joinRoomSuccess',()=>{
        // ...
});
//....

����2��A ����Ϊ��������շ� B �˷�����Ƶ���룬�ڵõ� B ͬ����Ƶ�����˫�����ᴴ�����ص� RTCPeerConnection�����ӱ�����Ƶ�������з��ͷ��ᴴ�� offer ���ñ��� sdp ��Ϣ��������ͨ��������������Լ��� SDP ��Ϣ���͸��Զ�
socket.on('answerVideo', async (user) => {
        VIDEO_VIEW.showInvideoModal();
        // ����������Ƶ����Ϣ
        const localStream = await this.createLocalVideoStream();
        this.localStream = localStream;
        document.querySelector('#echat-local').srcObject = this.localStream;
        this.peer = new RTCPeerConnection();
        this.initPeerListen();
        this.peer.addStream(this.localStream);
        if (user.sockId === this.sockId) {
          // ���շ�
        } else {
          // ���ͷ� ���� offer
          const offer = await this.peer.createOffer(this.offerOption);
          await this.peer.setLocalDescription(offer);
          socket.emit('receiveOffer', { user: this.user, offer });
        }
 });

����3��ǰ���������ʵ�ڵ��� setLocalDescription ��ͬʱ��Ҳ�Ὺʼ�ռ��Լ��˵�������Ϣ(candidate)������ڷǾ������ڻ������硰�򶴡����ɹ������᳢���� Stun/Turn ��������������Ҳ�����ռ����м̺�ѡ�ߡ�������ڴ��� RTCPeerConnection ���ǻ���Ҫ���� ICE �����ѡ�ߵ��¼���
initPeerListen () {
      // �ռ��Լ���������Ϣ�����͸��Զ�
      this.peer.onicecandidate = (event) => {
        if (event.candidate) { socket.emit('addIceCandidate', { candidate: event.candidate, user: this.user }); }
      };
      // ....
    }

����4�������շ� B ��ͨ������������õ��Զ˷��ͷ� A �˵ĺ��� SDP �� offer ��Ϣ�������� setRemoteDescription �洢�Զ˵� SDP ��Ϣ�����������ñ��ص� SDP ��Ϣ,��ͨ��������������ͺ��б��� SDP ��Ϣ�� answer��
socket.on('receiveOffer', async (offer) => {
        await this.peer.setRemoteDescription(offer);
        const answer = await this.peer.createAnswer();
        await this.peer.setLocalDescription(answer);
        socket.emit('receiveAnsewer', { answer, user: this.user });
 });

����5�������� A ͨ��������������յ����շ� B �� answer ��Ϣ����Ҳ����� setRemoteDescription������˫��������� SDP ��Ϣ�Ľ�����
socket.on('receiveAnsewer', (answer) => {
        this.peer.setRemoteDescription(answer);
      });

����6����˫�� SDP ��Ϣ������ɲ��Ҽ��� icecandidate �ռ��������ѡ��ͨ���������������������õ��˴˵���Ƶ����
socket.on('addIceCandidate', async (candidate) => {
        await this.peer.addIceCandidate(candidate);
});
this.peer.onaddstream = (event) => {
        // �õ��Է�����Ƶ��
        document.querySelector('#remote-video').srcObject = event.stream;
};

7.5������


��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_6.jpg           ��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_7.jpg

��������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦��_8.jpg

8��������


�����ϸ��½ڵ�6�����裬�������һ������WebRTC������ P2P ��Ƶʵʱͨ�����ܣ������ͨ�����������漰������Դ�룬��ӱ�����2������Դ����һ�ڵĸ�����������

ֵ��һ����ǣ������е� VIDEO_VIEW ��רע����ƵUI���JS SDK�������˷�����Ƶ Modal��������Ƶ Modal����Ƶ�� Modal�����Ǵӱ������� Web ��Ƶ�����Ʒ��ʹ�õ� JS SDK ��������ġ�

����ֻ�Ǽ򵥵ؽ�����WebRTC P2P��ͨ�Ż���ԭ���Լ��򵥵Ĵ���ʵ������ʵ����������������ʹ�õ� SDK ����֧�ֵ�Ե�ͨ�ţ���֧�ֶ�����Ƶͨ������Ļ�����ȹ�����Щ���ǻ���WebRTCʵ�ֵġ�

9�������


[1] WebRTC��׼API�����ĵ�
[2] WebRTC in the real world: STUN, TURN and signaling
[3] WebRTC ��������� STUN/TURN �������
[4] �˲����WebRTC����̬�������ƣ���ʵʱ����Ƶ�����ײ˻�
[5] ��Դʵʱ����Ƶ����WebRTC��Windows�µļ�������̳�
[6] WebRTCʵʱ����Ƶ����������ܹ�����
[7] ���ķ�����WebRTC ����������߽̳̣����ģ�[��������]
[8] P2P�������(��)��P2P�е�NAT��Խ(��)�������(����ԭ��ƪ)
[9] P2P�������(��)��P2P����֮STUN��TURN��ICE���
[10] ͨ���׶�����������P2P�����е�NAT��͸ԭ��

��¼������ʵʱ����Ƶ��������


[1] ��Դʵʱ����Ƶ����WebRTC�����£�
����Դʵʱ����Ƶ����WebRTC����״��
��������Դʵʱ����Ƶ����WebRTC����ȱ����
����̸WebRTC��׼֮����WebRTC�Ĺ�ȥ�����ں�δ����
�����ķ�����WebRTC ����������߽̳̣����ģ�[��������]��
��WebRTCʵʱ����Ƶ����������ܹ�������
���������ţ�����ʲô��WebRTC���������Լ������������ͨ���ģ���
��WebRTCʵʱ����Ƶ���������������ܹ���Э��ջ��
��dz̸����ʵʱ��Ƶֱ��ƽ̨�ļ���Ҫ����
��[�۵�] WebRTCӦ��ѡ��H.264��Ƶ������Ĵ�������
�����ڿ�ԴWebRTC����ʵʱ����Ƶ�����𣿵�3��SDK����Щ����
����Դʵʱ����Ƶ����WebRTC��RTP/RTCP���ݴ���Э���Ӧ����
������ʵʱ����Ƶ�����ж˵��˼��ܣ�E2EE���Ĺ���ԭ����
��ʵʱͨ��RTC����ջ֮����Ƶ�������
����Դʵʱ����Ƶ����WebRTC��Windows�µļ�������̳���
����ҳ��ʵʱ����Ƶ����WebRTC����������������������Ӧ�û��ж��ٿ�Ҫ���
���˲����WebRTC����̬�������ƣ���ʵʱ����Ƶ�����ײ˻���
����Ѷ����������΢��С��������Ƶ��WebRTC��ͨ�ļ���˼·��ʵ����
�����Ƽ�������������WebRTC��ʵʱ����Ƶ��֡��ʾʱ���Ż�ʵ����
����������ţ����ڿ�ԴWebRTC����0��1ʵ��ʵʱ����Ƶ���칦����
>> ����ͬ������ ����

[2] ʵʱ����Ƶ�����������������ϣ�
����ʱͨѶ����Ƶ������һ������Ƶ�����֮���۸�����
����ʱͨѶ����Ƶ��������������Ƶ�����֮������Ƶ������
����ʱͨѶ����Ƶ��������������Ƶ�����֮���������
����ʱͨѶ����Ƶ�������ģ�����Ƶ�����֮Ԥ�⼼��������
����ʱͨѶ����Ƶ�������壩����ʶ������Ƶ���뼼��H.264��
����ʱͨѶ����Ƶ��������������ο�ʼ��Ƶ����뼼����ѧϰ��
����ʱͨѶ����Ƶ�������ߣ�����Ƶ����������ԭ��������
����ʱͨѶ����Ƶ�������ˣ���������ʵʱ����ͨѶ�����׼��
����ʱͨѶ����Ƶ�������ţ���ʵʱ����ͨѶ�Ļ�������������������
����ʱͨѶ����Ƶ������ʮ����ʵʱ����ͨѶ�Ļ����������������
����ʱͨѶ����Ƶ������ʮһ����ʵʱ����ͨѶ�����������������
����ʱͨѶ����Ƶ������ʮ����������ʵʱ����Ƶ����ܹ�̽����
����ʱͨѶ����Ƶ������ʮ������ʵʱ��Ƶ����H.264���ص���������
����ʱͨѶ����Ƶ������ʮ�ģ���ʵʱ����Ƶ���ݴ���Э�������
����ʱͨѶ����Ƶ������ʮ�壩������P2P��ʵʱ����Ƶ��Ӧ�������
����ʱͨѶ����Ƶ������ʮ�������ƶ���ʵʱ����Ƶ�����ļ���������
����ʱͨѶ����Ƶ������ʮ�ߣ�����Ƶ����H.264��VP8��ǰ��������
����ʱͨѶ����Ƶ������ʮ�ˣ��������Ƶ������ԭ�����ݽ���Ӧ��ѡ����
����ʱͨѶ����Ƶ������ʮ�ţ����������ʷ����ͨ����Ƶ���뼼��������
��ʵʱ���������е���Ƶ���������ѹ������������
��������Ƶ�Ƽ�����������Ƶ������ѹ����������������
��ѧϰRFC3550��RTP/RTCPʵʱ����Э�����֪ʶ��
������RTMP���ݴ���Э���ʵʱ��ý�弼���о�������ȫ�ģ���
�������ܹ�ʦ̸ʵʱ����Ƶ�Ƶ�ʵ���ѵ�(��Ƶ�ɷ�)��
��dz̸����ʵʱ��Ƶֱ��ƽ̨�ļ���Ҫ����
�����ڿ���ιιι������ʵʱ����ͨ�����������Ľ����ѧ�����ⷽ������
��ʵ���ӳٵ���500�����1080Pʵʱ����Ƶֱ����ʵ��������
���ƶ���ʵʱ��Ƶֱ������ʵ�����������ʵʱ�뿪������������
���������򵥵ķ����������ʵʱ����Ƶ������
���������أ�֧�ְ��򼶷�˿������Facebookʵʱ��Ƶֱ����
������ʵʱ����Ƶ�����ж˵��˼��ܣ�E2EE���Ĺ���ԭ����
���ƶ���ʵʱ����Ƶֱ��������⣨һ������ƪ��
���ƶ���ʵʱ����Ƶֱ��������⣨�������ɼ���
���ƶ���ʵʱ����Ƶֱ��������⣨������������
���ƶ���ʵʱ����Ƶֱ��������⣨�ģ�������ͷ�װ��
���ƶ���ʵʱ����Ƶֱ��������⣨�壩�������ʹ�����
���ƶ���ʵʱ����Ƶֱ��������⣨�������ӳ��Ż���
��������ϵʵ�ʣ�ʵ��һ���򵥵ػ���HTML5��ʵʱ��Ƶֱ����
��IMʵʱ����Ƶ����ʱ�Ļ����������������
��dz̸ʵʱ����Ƶֱ����ֱ��Ӱ���û�����ļ���ؼ�����ָ����
������Ż����������ʵ��ʵʱ����Ƶ�ij����ӳ٣���
���״���¶����������������������ͬ����ֱ�������뿪�Ҳ����ٵģ���
��Androidֱ������ʵ�������ִһ�׼򵥵�ֱ��ϵͳ��
����������ʵʱ��Ƶֱ����TCP���ݴ�����һЩ�Ż�˼·��
��ʵʱ����Ƶ���켼�����������򲻿ɿ�����Ŀ��������������
��P2P������ν�ʵʱ��Ƶֱ����������75%����
��ר��΢����Ƶ���������ˣ�΢��ʵʱ��Ƶ���켼�����ݽ���
����Ѷ����Ƶʵ���ң�ʹ��AI�ڿƼ�ʵ�ֳ������ʵĸ���ʵʱ��Ƶ������
��΢���Ŷӷ�����΢��ÿ���ڴ�ʵʱ����Ƶ���챳��ļ���������
�����ڴ��ȵ�ʵʱֱ������ϵͳ��ʵ��˼·�뼼���ѵ������
������������ȫʵʱ����Ƶ����Ҫ�õ��Ŀ�Դ���̻�����
����ţ�Ƽ���������ʹ��QUICЭ��ʵ��ʵʱ��Ƶֱ��0���٣���
��ʵʱ����Ƶ�����г����ӳټܹ���˼���뼼��ʵ����
������ʵʱ����Ƶ�����е���ʱ����һƪ�͹���
��ʵʱ��Ƶֱ���ͻ��˼����̵㣺Native��HTML5��WebRTC��΢��С������
��д��С�׵�ʵʱ����Ƶ�������������
��΢�Ŷ�ý���Ŷӷ�̸������Ƶ������ѧϰ��΢�ŵ�����Ƶ��������ս����
����Ѷ����������΢��С��������Ƶ��������Ĺ�����
��΢�Ŷ�ý���Ŷ��������̸����һ�������˽������Ƶ������
������΢������������΢������Ƶ������Ż�ʵ��֮·��
��ʵʱ��Ƶ�Ļ�������Ƶֱ��Ӧ���еļ���ԭ����ʵ���ܽ���
�������η���˵������������Ϊ��������ʵʱͨ�ŵļ�����ս��
����Ѷ����������΢��С��������Ƶ��WebRTC��ͨ�ļ���˼·��ʵ����
������΢������������΢��ʵʱֱ������İ���߲����ܹ�ʵ����
�������ɻ���ʵʱ��Ƶֱ��������ʱ400ms�ڵ��Ż�ʵ����
�������ռ�������������ڶг��������Ƶ����뼼���Ĺ�ȥ�����ںͽ�����
����������ţ�ʵʱ����Ƶ��������֪ʶȫ���̵���
��ʵʱ����Ƶ���ӱر�����������11����Ƶ������صĻ���������
���Ա�ֱ�������ɻ������塢����ʱ��ʵʱ��Ƶֱ������������
��ʵʱ����Ƶ�������۱ر������ʡ��������Ƶ�߶�ѹ�������Ԥ�⼼����
>> ����ͬ������ ����

��ʱͨѶ�� - ��ʱͨѶ������������ ��Դ�� - ��ʱͨѶ������������

��������¼�����¼���ר��

�Ƽ�����
���� 20
֮ǰҲ����ʹ����WebRTC��˹�˾��Ŀ�е�����Ƶͨ��ģ�飬�������ƪ����Ҳ�ع��ܽ�һ�£�

WebRTC�ǻ���P2Pͨ�ŵģ�����������ͨ��������֮ǰ����Ҫ���������������̣�
�����������ý����Ϣ��ʹͨ��˫���ܹ�������Ƶ��ȷ�ر���룻
���紩͸������������Ϣ��ʹλ�ڲ�ͬ��������ͨ��˫���ܹ���������P2P���ӡ�
�������������漰����Ϣ����Ҫ��������æ���ݣ�֮ǰ����˾���ļ�ʱͨѶAPP������Ϊһ���������͵���Ϣ�������������������ת���ġ�
����ͨ��������ɺ�ͨ��˫���Ϳ���ֱ�Ӵ���ý��������Ⱦ�����ˡ�
���ã�׵���ݳ� ������ 2021-08-24 11:26
֮ǰҲ����ʹ����WebRTC��˹�˾��Ŀ�е�����Ƶͨ��ģ�飬�������ƪ����Ҳ�ع��ܽ�һ�£�

WebRTC�ǻ� ...

p2p��ͨ������£�Ҳ����ת�ǰɡ�
�����Ӧ�ã�Ӧ�ò����ƶ��ˣ�
���ã�JackJiang ������ 2021-08-24 12:56
p2p��ͨ������£�Ҳ����ת�ǰɡ�
�����Ӧ�ã�Ӧ�ò����ƶ��ˣ�

�����ƶ��˵�
���ã�׵���ݳ� ������ 2021-08-24 13:43
�����ƶ��˵�

���ǵ�AppRTC�ǰɡ�
���ã�JackJiang ������ 2021-08-24 15:09
���ǵ�AppRTC�ǰɡ�

�õ���Github�ϵĿ�Դ��ĿSignal����װ��WebRTC�⣺https://github.com/signalapp/lib ... master/release/libs
���ã�׵���ݳ� ������ 2021-08-24 17:17
�õ���Github�ϵĿ�Դ��ĿSignal����װ��WebRTC�⣺https://github.com/signalapp/libwebrtc-android/tre ...

ok �˽���
���demoֻ�ܶ˵���ͨ�ţ�����ʵ�ֶ��ͨ����
���ã�Mr.Potter ������ 2021-08-24 18:43
���demoֻ�ܶ˵���ͨ�ţ�����ʵ�ֶ��ͨ����

WebRTC���������һ��һ�ģ����Ҫʵ�ֶ�������Ƶ������Ҫ�ҿ�Դ�ĵ�3������
������demo��������˵�ַ��ʱ�� �ᱨ����ʾ
���ã�No navigator.mediaDevices

�Ұٶ�˵��1����ַΪlocalhost:// ����ʱ��2����ַΪhttps:// ʱ��3��Ϊ�ļ�����file:///���ſ��Է��ʵ������ҵ������ַ��http�ģ��������Ӧ����ô������
ǩ��: ����ǩ��
���ã�edward13th ������ 2021-08-30 15:54
������demo��������˵�ַ��ʱ�� �ᱨ����ʾ
�Ұٶ�˵��1����ַΪlocalhost:// ����ʱ��2����ַΪhttps:// ...

��������Ѹ����ǩ����֤��
��л¥������С�׺��Ѻã����ĺ�ϸ��
ǩ��: ������
лл¥���Ľ��� лл
���ģ��ʺ���������
лл¥�� �dz���
������λ��ţ�˽����ʵ������Ƶ�ڷ������˴洢������
���ã�junior_lee ������ 2023-04-23 17:33
������λ��ţ�˽����ʵ������Ƶ�ڷ������˴洢������

����Сţ,����һ�ݱ��������Ϳ�����
ǩ��: im��ҵ10�����ϣ���ӭ�д裡[url=http://www.52im.net/static/image/smiley/default/handshake.gif]http://www.52im.net/static/image/smiley/default/handshake
���ã�׵���ݳ� ������ 2021-08-24 11:26
֮ǰҲ����ʹ����WebRTC��˹�˾��Ŀ�е�����Ƶͨ��ģ�飬�������ƪ����Ҳ�ع��ܽ�һ�£�

WebRTC�ǻ� ...

webrtc ice ������ ����host,nat,��ת����ѡ���;
Ⱥ��Ƶ��sfu������һ��;
Ӳ��һ�㶼��mcuģʽ��.
ǩ��: im��ҵ10�����ϣ���ӭ�д裡[url=http://www.52im.net/static/image/smiley/default/handshake.gif]http://www.52im.net/static/image/smiley/default/handshake
ѧ����
ѧϰ��
����¥�� ×
ʹ��΢�Ŵ��ͣ� ʹ��֧�������ͣ�

���ض���