WebRTC מגיע ל-Firefox, Android ו-iOS

הרבה דברים התרחשו ב-WebRTC בשבועות האחרונים. הגיע הזמן לבצע עדכון!

במיוחד אנחנו שמחים לראות ש-WebRTC מגיע לכמה דפדפנים ופלטפורמות.

התכונה getUserMedia זמינה עכשיו ב-Chrome ללא דגלים, וגם ב-Opera וב-Firefox Nightly/Aurora (אבל ב-Firefox צריך להגדיר את ההעדפות). כדאי לעיין בדמו של getUserMedia לדפדפנים שונים בכתובת simpl.info/gum, ולעיין בדוגמאות המדהימות של Chris Wilson לשימוש ב-getUserMedia כקלט ל-Web Audio.

התכונה webkitRTCPeerConnection זמינה עכשיו בגרסת Chrome היציבה, ללא דגל. תמיכה בשרת TURN זמינה ב-Chrome מגרסה 24 ואילך. יש הדגמה פשוטה במיוחד של הטמעת RTCPeerConnection ב-Chrome בכתובת simpl.info/pc ואפליקציית וידאו צ'אט נהדרת בכתובת apprtc.appspot.com. (הסבר קצר על השם: אחרי כמה חזרות, השם הנוכחי הוא webkitRTCPeerConnection. שמות והטמעות אחרים הוצאו משימוש. כשתהליך הסטנדרטים יתייצב, הקידומת webkit תוסר).

WebRTC הוטמע עכשיו גם למחשב ב-Firefox Nightly וב-Aurora, ול-iOS ול-Android דרך דפדפן Bowser של Ericsson.

DataChannel

DataChannel הוא ממשק API של WebRTC לתקשורת peer-to-peer של נתונים שרירותיים, עם ביצועים גבוהים וזמן אחזור נמוך. ממשק ה-API פשוט ודומה ל-WebSocket, אבל התקשורת מתרחשת ישירות בין הדפדפנים, כך ש-DataChannel יכול להיות מהיר בהרבה מ-WebSocket גם אם נדרש שרת העברה (TURN) (כשהפעולה 'חציצה דרך חומה' כדי להתמודד עם חומות אש ו-NATs נכשלת).

אנחנו מתכננים להוסיף את DataChannel לגרסה 25 של Chrome, באמצעות דגל – אבל יכול להיות שהוא לא יתווסף בגרסה הזו. התכונה הזו תהיה לניסוי בלבד, יכול להיות שהיא לא תפעל באופן מלא ולא תהיה אפשרות לתקשר עם ההטמעה ב-Firefox. DataChannel בגרסאות מאוחרות יותר אמור להיות יציב יותר, והוא יוטמע כדי לאפשר אינטראקציה עם DataChannel ב-Firefox.

ב-Firefox Nightly/Aurora יש תמיכה ב-mozGetUserMedia, ב-mozRTCPeerConnection וב-DataChannel (אבל אל תשכחו להגדיר את ההעדפות בדף about:config!)

לפניכם צילום מסך של DataChannel שפועל ב-Firefox:

צילום מסך של DataChannel ב-Firefox

ההדגמה הזו זמינה בכתובת http://mozilla.github.com/webrtc-landing/data_test.html. זהו קטע קוד לדוגמה:

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);
        }

מידע נוסף ודמואים להטמעה ב-Firefox זמינים בבלוג hacks.mozilla.org. תמיכה בסיסית ב-WebRTC אמורה להתפרסם ב-Firefox 18 בתחילת 2013, ואנחנו מתכננים להוסיף תמיכה בתכונות נוספות, כולל getUserMedia ואילוצים של createOffer/Answer, וגם ב-TURN (כדי לאפשר תקשורת בין דפדפנים שמאחורי חומות אש).

מידע נוסף על WebRTC זמין במאמר תחילת העבודה עם WebRTC. יש אפילו ספר WebRTC, שזמין במהדורה מודפסת ובמספר פורמטים של ספרים אלקטרוניים.

מגבלות רזולוציה

האילוצים הוטמעו ב-Chrome מגרסה 24 ואילך. אפשר להשתמש בהם כדי להגדיר ערכים לרזולוציית הווידאו לשיחות getUserMedia() ו-RTCPeerConnection addStream().

דוגמה זמינה בכתובת simpl.info/getusermedia/constraints. אפשר לשחק עם אילוצים שונים על ידי הגדרת נקודת עצירה ושינוי הערכים.

כמה דברים שחשוב לדעת... אילוצים של getUserMedia שמוגדרים בכרטיסייה אחת בדפדפן משפיעים על האילוצים בכל הכרטיסיות שנפתחות לאחר מכן. הגדרת ערך אסור לאילוצים מובילה להודעת שגיאה קצת סתומה:

navigator.getUserMedia error:  NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}

כך גם השגיאה אם מנסים להשתמש ב-getUserMedia ממערכת הקבצים המקומית, ולא בשרת.

צילום מסך בסטרימינג

התכונה 'צילום כרטיסייה' זמינה עכשיו בערוץ הפיתוח של Chrome. כך אפשר לצלם את האזור הגלוי בכרטיסייה כסטרימינג, ולאחר מכן להשתמש בו באופן מקומי או באמצעות addStream() של RTCPeerConnection. שימושית מאוד לצילום מסך ולשיתוף דפי אינטרנט. מידע נוסף זמין בהצעה לתיעוד תוכן בכרטיסיות של WebRTC.

נשמח לשמוע מה אתם עושים עם ממשקי ה-API האלה, אז נשמח לקבל תגובות על העדכון הזה.

...ולא לשכוח לדווח על באגים שתמצאו בכתובת chromiumbugs.appspot.com.