انتقل إلى المحتوى
use-cases / a-microphone-over-http / hero
PIPE · AUDIO · LIVE

ميكروفون عبر HTTP، في طرفيّتين

أنت تُصحّح بشراكة في منتصف الليل ولن يصمد hotspot الجانب الآخر أمام Zoom. كلاكما لديه shell. ffmpeg يلتقط الميكروفون، curl يُرسله بـ PUT إلى مسار أنبوب، الطرفيّة الأخرى تطلبه بـ curl وتُشغّل البايتات. لا SDK، لا إشارات، لا اجتماع.

اقرأ توثيق pipe

لا إشارات، لا SDK، لا Zoom

use-cases / a-microphone-over-http / mechanism

curl-ان، مسار أنبوب واحد، لا إشارات

ffmpeg يُرمّز ميكروفونك إلى opus ويكتبه إلى stdout. curl يُرسل ذلك stdin بـ PUT إلى /api/v1/pipe/voice. أيّ من يُرسل GET للمسار نفسه يستقبل البايتات أثناء إنتاج المُرسِل لها. الأنبوب يحتفظ بالمستقبِل حتى خمس دقائق ليتّصل المُرسِل، يُمرّر Content-Type، ولا يُخزّن شيئاً.

من الميكروفون إلى السمّاعات في أربعة أسطر4 خطوات · صفر إشارات
0101 · التقاط

اقرأ الميكروفون

ffmpeg -f alsa -i default -c:a libopus -f ogg - يقرأ ميكروفونك، يُرمّز إلى opus، يكتب إلى stdout.

0202 · بثّ

تمرير إلى curl

curl -T - يُرسل stdin بـ PUT إلى /api/v1/pipe/voice. الأنبوب ينتظر حتى خمس دقائق لمستقبِل على المسار نفسه.

0303 · اتصال

المستقبِل يُرسل GET للمسار

طرفيّتهم تُشغّل curl https://.../api/v1/pipe/voice. الأنبوب يطابق المُرسِل بالمستقبِل ويبدأ البثّ.

0404 · تشغيل

البايتات تصل إلى السمّاعات

curl لديهم يُمرّر إلى aplay أو mpv. الصوت يُشغَّل وهو يصل، بايتاً ببايت. ctrl-C يُنهي المكالمة.

الأنبوب يُمرّر Content-Type، يدعم وقت احتفاظ يصل إلى خمس دقائق قبل اتصال النظير، ويستخدم HTTPS — لا شيء أكثر غرابة من البروتوكول الذي يتحدّثه shell الخاصّ بك أصلاً.

use-cases / a-microphone-over-http / lofi

Lo-fi عن قصد

لا إلغاء صدى، لا jitter buffer، لا DSP فاخر. إنّها قناة الصوت التي يستخدمها زوج SRE للتصحيح: مُجرَّدة، عبء منخفض، موثوقة. كلّ طبقة تبنيها منصّة اجتماعات هي طبقة لا يملكها زوج الأنبوب أصلاً.

طبقات غير موجودة0 سطر كود

أشياء لا تحدث

  • فتح مصافحة STUN/TURN
  • تشغيل خادم إشارات لتبادل SDPs
  • التفاوض على codec عبر مكدّس WebRTC
  • قبول حوار صلاحيّة الميكروفون
  • النقر على Join في تطبيق سطح مكتب
  • العودة إلى TURN عند فشل اختراق NAT
  • الجلوس في غرفة انتظار للمضيف
ما تفعله فعلاًطرفيّتان

أشياء تحدث فعلاً

  • اكتب ffmpeg | curl في shell المُرسِل
  • اكتب curl | mpv في shell المستقبِل
  • تحدّث بينما تتدفّق البايتات عبر الأنبوب
  • ctrl-C عند الانتهاء — المسار يعود إلى لا شيء
use-cases / a-microphone-over-http / angles

ثلاثة قرّاء، زوج curl واحد

نفس آليّة الميكروفون-عبر-HTTP تُقرأ بثلاث طرق مختلفة حسب من يكون على الطرف الآخر من الأنبوب.

للمُصحِّح بشراكة

صوت يستحقّه SRE

أنت ثلاثة أوامر داخل حادثة إنتاج. تشغيل Zoom سيستغرق وقتاً أطول من الإصلاح. ffmpeg | curl من جانبك، curl | mpv من جانبهم — تستطيع التحدّث وأنت تتتبّع السجلّات.

للمطوّر المسافر

اصمد أمام hotspot

ربط الهاتف يختنق على مكالمة فيديو. بثّ opus بـ 32 kbps عبر HTTP لا يختنق. الطرف الآخر يفتح رابطاً ويستمع — لا يحتاجون حتى ميكروفوناً للمشاركة.

للمُهتمّ بالخصوصيّة

لا تسجيل، لا تطبيق، لا حساب

لا شيء يُخزَّن على خادم. لا تطبيق طرف ثالث على أيّ من الجهازين. الأنبوب بثّ خالص — البايتات تمرّ وتختفي لحظة هبوط ctrl-C.

use-cases / a-microphone-over-http / punchline

الصوت مجرّد بايتات. البايتات مجرّد أنبوب.

البثّ يبدأ عند ضغط enterالبثّ ينتهي عند ضغط ctrl-C
livepipe.containers.hoody.com/api/v1/pipe/voiceبينما أيّ طرف يعمل
ctrl-C
404pipe.containers.hoody.com/api/v1/pipe/voiceلا تسجيل، لا إعادة تشغيل
use-cases / a-microphone-over-http / replaces

ما يستبدله هذا

صفّ أدوات الصوت التي يُراكمها كلّ زوج مهندسين. كلّ واحدة تفترض اجتماعاً، أو حساباً، أو خادم إشارات مخصّصاً. رابط الأنبوب لا يفترض شيئاً من ذلك.

  • مكالمة صوت Zoomجسر مُجدول، تثبيت تطبيق، صلاحيّات سطح مكتب
  • مشاركة شاشة Slack مع صوتكلا الجانبين على عميل سطح المكتب، Huddles فقط
  • قناة صوت Discordعضويّة سيرفر، حساب، أسقف bitrate
  • صوت Google Meetسباكة تقويم لدردشة تصحيح من 90 ثانية
  • WebRTC مع إشارات مخصّصةSTUN/TURN، تبادل SDP، خادم عليك تشغيله
  • SaaS دردشة صوتيّةمورّد آخر، رخصة مقعد أخرى
use-cases / a-microphone-over-http / cta

في المرّة القادمة التي يقول فيها أحدهم 'هل يمكننا الاجتماع بسرعة'، افتح أنبوباً بدلاً من ذلك.

اقرأ pipe API
use-cases / a-microphone-over-http / related

اقرأ الآخرين