وصول WebRTC إلى Firefox وAndroid وiOS

حدثت أحداث كثيرة مع WebRTC خلال الأسابيع القليلة الماضية. حان الوقت لتحديث التطبيق.

على وجه الخصوص، نحن متحمسون لرؤية وصول WebRTC إلى متصفحات وأنظمة أساسية متعددة.

يتوفر getUserMedia الآن في Chrome بدون أي علامات، وكذلك في Opera وFirefox Nightly/Aurora (ولكن يجب ضبط الإعدادات المفضّلة في Firefox). ألقِ نظرة على العرض التوضيحي لـ getUserMedia عبر المتصفحات على simpl.info/gum - واطلع على الأمثلة المذهلة لكريس ويلسون لاستخدام getUserMedia كإدخال لميزة Web Audio.

يتوفّر "webkitRTCPeerConnection" الآن في إصدار Chrome الثابت وبدون أي علامات. يتوفّر دعم الخادم T في الإصدار 24 من Chrome والإصدارات الأحدث. هناك عرض توضيحي جدًا لتطبيق RTCPeerConnection من Chrome على simpl.info/pc، وكذلك تطبيق رائع لمحادثة الفيديو على apprtc.appspot.com (شرح عن الاسم: بعد تكرارات عديدة، يُعرف التطبيق حاليًا باسم webkitRTCPeerConnection. وتم إيقاف أسماء وطرق تنفيذ أخرى نهائيًا. وعند تثبيت عملية المعايير، ستتم إزالة البادئة webkit).

وقد تم تنفيذ WebRTC أيضًا على أجهزة الكمبيوتر المكتبي في Firefox Nightly وAurora، وعلى نظامي التشغيل iOS وAndroid عبر متصفّح Bowser من Ericsson.

DataChannel

DataChannel هي واجهة برمجة تطبيقات WebRTC API توفّر إمكانية التواصل بين البيانات العشوائية من خلال اتصال نظير إلى نظير للبيانات ذات وقت الاستجابة المنخفض. تشبه واجهة برمجة التطبيقات WebSocket بشكل بسيط، ولكن يتم الاتصال بين المتصفحات بشكل مباشر، ولذلك يمكن أن تكون واجهة DataChannel أسرع بكثير من WebSocket حتى إذا كان خادم الترحيل (Current) مطلوبًا (عند الحاجة إلى استخدام تقنية الثقب للتعامل مع جدران الحماية وإخفاق ترجمة عنوان الشبكة).

تم التخطيط لخدمة DataChannel للإصدار 25 من Chrome، ولكن تم الإبلاغ عن ذلك مؤخرًا - على الرغم من أنه قد لا يشتمل على هذا الإصدار. سيكون هذا من أجل التجريب فقط، وقد لا يعمل بكامل طاقته، ولن يكون التواصل ممكنًا باستخدام تنفيذ Firefox. يجب أن تكون DataChannel في الإصدارات اللاحقة أكثر ثباتًا وسيتم تنفيذها لتفعيل التفاعل مع DataChannel في متصفّح Firefox.

يتوافق Firefox Nightly/Aurora مع 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 من مدونة hacks.Mozilla.org. من المقرر إطلاق دعم WebRTC الأساسي في الإصدار 18 من Firefox في بداية عام 2013، ومن المقرر دعمه للميزات الإضافية بما في ذلك getUserMedia وقيود إنشاء عرض/إجابة، بالإضافة إلى التحول (للسماح بالاتصال بين المتصفحات وراء جدران الحماية).

لمزيد من المعلومات حول WebRTC، راجِع بدء استخدام WebRTC. يمكنك أيضًا استخدام كتاب WebRTC بتنسيق مطبوع والعديد من تنسيقات الكتب الإلكترونية.

قيود الحل

تم تنفيذ القيد في الإصدار 24 من Chrome والإصدارات الأحدث. يمكن استخدام هذه البيانات لضبط قيم لدرجة دقة الفيديو لمكالمات getUserMedia() وRTCPeerConnection addStream().

يتوفّر مثال على الرابط simpl.info/getusermedia/restrictionts. كما يمكنك تجربة القيود المختلفة من خلال ضبط نقطة توقف وتعديل القيم.

بعض المشكلات... تؤثر قيود getUserMedia التي يتم ضبطها في علامة تبويب واحدة في المتصفّح في قيود جميع علامات التبويب التي يتم فتحها لاحقًا. إنّ ضبط قيمة غير مسموح بها للقيود يؤدي إلى ظهور رسالة خطأ غامضة:

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

وبالمثل، يظهر الخطأ إذا حاولت استخدام getUserMedia من نظام الملفات المحلي، وليس على خادم.

بث لقطة الشاشة

تتوفّر ميزة "التقاط علامات التبويب" الآن في قناة إصدار مطوّري البرامج من Chrome. ويتيح ذلك التقاط المنطقة المرئية من علامة التبويب كتدفق، والتي يمكن استخدامها بعد ذلك محليًا، أو باستخدام addStream() في RTCPeerConnection. مفيدة جدًا لتسجيل الإحصاءات ومشاركة صفحات الويب. لمزيد من المعلومات، يمكنك الاطّلاع على اقتراح تسجيل محتوى علامة التبويب WebRTC.

يُرجى مشاركتنا رأيك من خلال التعليق على هذا التحديث: تسعدنا معرفة رأيك في استخدام واجهات برمجة التطبيقات هذه.

...ولا تنسَ الإبلاغ عن أي أخطاء تواجهها على chromiumbugs.appspot.com.