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

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

באופן ספציפי, אנחנו שמחים מאוד לראות ש-WebRTC מגיע למספר דפדפנים ופלטפורמות.

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

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

WebRTC הוטמע גם במחשב ב-Firefox Nightly וב-Aurora, וב-iOS וב-Android באמצעות דפדפן Boser של Ericsson.

DataChannel

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

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

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

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

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

הדגמה זו נמצאת בכתובת 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 זמין בבלוג httpss.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.