RTCPeerConnection
là giao diện trung tâm trong API WebRTC. Thông số này
đại diện cho sự kết nối giữa ứng dụng ngang hàng cục bộ và ứng dụng ngang hàng, từ đó chia sẻ tất cả
hàm và sự kiện cần thiết để thiết lập kết nối.
Thiết lập kết nối ngang hàng
Các ứng dụng triển khai chức năng WebRTC thường sẽ dựa nhiều vào
giao diện RTCPeerConnection
. Từ phía người gọi (tức là các ứng dụng ngang hàng
sẽ bắt đầu kết nối), quy trình thiết lập kết nối thường
như sau:
- Tạo một thực thể
RTCPeerConnection
mới có cấu hình ICE phù hợp. - Tạo một nội dung mô tả SDP cục bộ bằng
RTCPeerConnection.createOffer()
. - Đặt nội dung mô tả SDP cục bộ bằng
RTCPeerConnection.setLocalDescription()
. - Chuyển (sử dụng dịch vụ tín hiệu) nội dung mô tả SDP địa phương sang ứng dụng ngang hàng từ xa.
- Đăng ký trình xử lý cho các sự kiện
icecandidate
trênRTCPeerConnection
. - Đối với mỗi sự kiện
icecandidate
, hãy chuyển sự kiện đó (bằng dịch vụ tín hiệu) sang ứng dụng ngang hàng từ xa. - Chờ mô tả SDP từ xa đến từ dịch vụ tín hiệu và đặt mô tả bằng
RTCPeerConnection.setRemoteDescription()
bằng cách sử dụng. - Chờ các ứng viên ICE từ xa sử dụng dịch vụ tín hiệu và thêm
các ứng viên đó từ
RTCPeerConnection.addIceCandidate()
Đối với bên gọi, quy trình hơi khác.
- Tạo một thực thể
RTCPeerConnection
mới có cấu hình ICE phù hợp. - Chờ mô tả SDP từ xa đến từ dịch vụ tín hiệu và đặt mô tả bằng
RTCPeerConnection.setRemoteDescription()
bằng cách sử dụng. - Tạo câu trả lời cho phần mô tả SDP từ xa bằng cách gọi
RTCPeerConnection.createAnswer()
. - Chuyển (sử dụng dịch vụ tín hiệu) câu trả lời cho ứng dụng ngang hàng từ xa.
- Đăng ký trình xử lý cho các sự kiện
icecandidate
trênRTCPeerConnection
. - Đối với mỗi sự kiện
icecandidate
, hãy chuyển sự kiện đó (bằng dịch vụ tín hiệu) sang ứng dụng ngang hàng từ xa. - Chờ các ứng viên ICE từ xa sử dụng dịch vụ tín hiệu và thêm
các ứng viên đó từ
RTCPeerConnection.addIceCandidate()
Thách thức với API này là hầu hết các hoạt động này đều không đồng bộ,
việc này thường khiến việc triển khai ứng dụng WebRTC trở nên phức tạp.
Nhiều hàm trả về một Promise
phải được giải quyết trước khi
bước tiếp theo trong quá trình có thể tiếp tục.
Khi triển khai một ứng dụng bằng API này, nhà phát triển nên sử dụng async
và await
thay vì đăng ký trình nghe
(bằng Promise.then()
), vì điều này giúp mã của bạn dễ tuân theo hơn. Hãy xem xét
ví dụ sau đây:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Khi viết mã ở trên bằng async
và await
, chúng tôi nhận được các thông tin sau:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}