Trong vài tuần qua, WebRTC đã có nhiều thay đổi. Đã đến lúc cập nhật!
Cụ thể, chúng tôi rất vui khi thấy WebRTC xuất hiện trên nhiều trình duyệt và nền tảng.
getUserMedia
hiện có trong Chrome mà không cần cờ, cũng như Opera và Firefox Nightly/Aurora (mặc dù đối với Firefox, bạn cần đặt lựa chọn ưu tiên). Hãy xem bản minh hoạ đa trình duyệt của getUserMedia
tại simpl.info/gum – và tham khảo các ví dụ tuyệt vời của Chris Wilson về cách sử dụng getUserMedia
làm dữ liệu đầu vào cho Web Audio.
webkitRTCPeerConnection
hiện đã có trong Chrome phiên bản ổn định và không có cờ. Tính năng hỗ trợ máy chủ TURN có trong Chrome 24 trở lên. Có một bản minh hoạ cực kỳ đơn giản về cách triển khai RTCPeerConnection của Chrome tại simpl.info/pc và một ứng dụng trò chuyện video tuyệt vời tại apprtc.appspot.com. (Giải thích về tên: sau vài lần lặp lại, tên này hiện được gọi là webkitRTCPeerConnection
. Các tên và cách triển khai khác không còn được dùng nữa. Khi quy trình tiêu chuẩn đã ổn định, tiền tố webkit
sẽ bị xoá.)
WebRTC hiện cũng đã được triển khai cho máy tính trong Firefox Nightly và Aurora, cũng như cho iOS và Android thông qua trình duyệt Bowser của Ericsson.
DataChannel
DataChannel là một API WebRTC để giao tiếp ngang hàng với hiệu suất cao, độ trễ thấp và dữ liệu tuỳ ý. API này đơn giản, tương tự như WebSocket – nhưng hoạt động giao tiếp diễn ra trực tiếp giữa các trình duyệt, vì vậy, DataChannel có thể nhanh hơn nhiều so với WebSocket ngay cả khi cần có máy chủ chuyển tiếp (TURN) (khi không thể "đục lỗ" để đối phó với tường lửa và NAT).
DataChannel dự kiến sẽ có trong phiên bản 25 của Chrome, sau một cờ – mặc dù có thể phiên bản này sẽ không có. Tính năng này chỉ dành cho mục đích thử nghiệm, có thể không hoạt động đầy đủ và không thể giao tiếp khi triển khai Firefox. DataChannel trong các phiên bản sau sẽ ổn định hơn và sẽ được triển khai để cho phép tương tác với DataChannel trong Firefox.
Firefox Nightly/Aurora hỗ trợ mozGetUserMedia
, mozRTCPeerConnection
và DataChannel
(nhưng đừng quên đặt các tuỳ chọn about:config!)
Dưới đây là ảnh chụp màn hình DataChannel đang chạy trong Firefox:

Bản minh hoạ này nằm tại http://mozilla.github.com/webrtc-landing/data_test.html. Dưới đây là một đoạn mã:
pc1.onconnection = function() {
log("pc1 onConnection ");
dc1 = pc1.createDataChannel("This is pc1",{}); // reliable (TCP-like)
dc1 = pc1.createDataChannel("This is pc1",{outOfOrderAllowed: true, maxRetransmitNum: 0}); // unreliable (UDP-like)
log("pc1 created channel " + dc1 + " binarytype = " + dc1.binaryType);
channel = dc1;
channel.binaryType = "blob";
log("pc1 new binarytype = " + dc1.binaryType);
// Since we create the datachannel, don't wait for onDataChannel!
channel.onmessage = function(evt) {
if (evt.data instanceof Blob) {
fancy_log("*** pc2 sent Blob: " + evt.data + ", length=" + evt.data.size,"blue");
} else {
fancy_log('pc2 said: ' + evt.data, "blue");
}
}
channel.onopen = function() {
log("pc1 onopen fired for " + channel);
channel.send("pc1 says Hello...");
log("pc1 state: " + channel.state);
}
channel.onclose = function() {
log("pc1 onclose fired");
};
log("pc1 state:" + channel.readyState);
}
Bạn có thể xem thêm thông tin và bản minh hoạ về cách triển khai Firefox trên blog hacks.mozilla.org. Tính năng hỗ trợ WebRTC cơ bản sẽ được phát hành trong Firefox 18 vào đầu năm 2013 và chúng tôi dự định hỗ trợ thêm các tính năng khác, bao gồm cả getUserMedia
và các quy tắc ràng buộc createOffer/Answer, cũng như TURN (để cho phép giao tiếp giữa các trình duyệt phía sau tường lửa).
Để biết thêm thông tin về WebRTC, hãy xem bài viết Bắt đầu sử dụng WebRTC. Thậm chí còn có một sách về WebRTC, có cả bản in và một số định dạng sách điện tử.
Giới hạn về độ phân giải
Điều kiện ràng buộc đã được triển khai trong Chrome 24 trở lên. Bạn có thể dùng các giá trị này để đặt giá trị cho độ phân giải video cho các lệnh gọi getUserMedia()
và RTCPeerConnection addStream()
.
Bạn có thể xem ví dụ tại simpl.info/getusermedia/constraints. Thử nghiệm với các điều kiện ràng buộc khác nhau bằng cách đặt điểm ngắt và điều chỉnh các giá trị.
Một vài điểm cần lưu ý... Các điều kiện ràng buộc getUserMedia
được đặt trong một thẻ trình duyệt sẽ ảnh hưởng đến các điều kiện ràng buộc cho tất cả các thẻ được mở sau đó. Việc đặt giá trị không được phép cho các quy tắc ràng buộc sẽ đưa ra một thông báo lỗi khá khó hiểu:
navigator.getUserMedia error: NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}
Tương tự như lỗi nếu bạn cố gắng sử dụng getUserMedia
từ hệ thống tệp cục bộ, chứ không phải trên máy chủ!
Chụp ảnh màn hình trực tuyến
Tính năng Chụp thẻ hiện đã có trong kênh Chrome Dev. Điều này cho phép bạn chụp vùng hiển thị của thẻ dưới dạng luồng, sau đó có thể sử dụng cục bộ hoặc với addStream()
của RTCPeerConnection. Rất hữu ích khi chia sẻ trang web và truyền màn hình. Để biết thêm thông tin, hãy xem Đề xuất về tính năng Ghi lại nội dung trên thẻ WebRTC.
Hãy cho chúng tôi biết ý kiến của bạn về nội dung cập nhật này bằng cách bình luận: chúng tôi rất mong được biết bạn đang làm gì với các API này.
...và đừng quên báo cáo mọi lỗi bạn gặp phải tại chromiumbugs.appspot.com!