Mopidy: إضافة دعم لدفق إخراج صوت HTTP

تم إنشاؤها على ١٩ يناير ٢٠١١  ·  15تعليقات  ·  مصدر: mopidy/mopidy

إذا قدم أحدهم دفقًا للصوت الذي يتم تشغيله بواسطة Mopidy عبر HTTP ، فيمكن استخدامه من قبل عملاء MPD مع دعم تدفقات HTTP وأجهزة مثل Squeezeboxes .

يجب أن يكون ترميز الدفق على الأرجح Ogg Vorbis و / أو MP3.

C-enhancement A-audio

التعليق الأكثر فائدة

أي تحديثات في العامين الماضيين؟

ال 15 كومينتر

بافتراض الكود التالي:

import logging
from BaseHTTPServer import BaseHTTPRequestHandler

from mopidy import get_version

logger = logging.getLogger('mopidy.outputs.http')

class StreamingHTTPRequestHandler(BaseHTTPRequestHandler):
    server_version = 'HTTPOutput/%s' % get_version()

    def do_GET(self):
        self.send_response(200)
        self.send_header('content-type', 'audio/mpeg')
        self.end_headers()

        register_fd_with_output(self.wfile.fileno())

        self.close_connection = 0

    def log_message(self, format, *args):
        logger.info(format, *args)

حيث register_fd_with_output() هي وظيفة ترسل إشارة الإضافة على مصدر fd في إخراج HTTP ( audioconvert ! lame ! multifdsink ) ولدينا BaseHTTPServer.HTTPServer يعمل في ThreadingActor مع و StreamingHTTPRequestHandler ينبغي علينا العمل HTTP الدفق.

بالنسبة إلى الميزات الإضافية مثل البيانات الوصفية ، يجب أن تكون الروابط التالية مفيدة:

ربما لا ينبغي استخدام الكود أعلاه لحل هذه المشكلة. مع الحالة الحالية لقاعدة الشفرة ، نريد شيئًا يعتمد على الكرز.

أول شيء يجب القيام به هو إنشاء عنصر GStreamer وتسجيله يمكننا استخدامه في إعداد OUTPUT . باستخدام الخلاطات ، يجب أن يكون الرمز الموجود في # 152 أو أمثلة Pitivi كافيًا للبدء. سيتم تغليف العنصر بشكل أساسي بـ multifdsink ، والتعامل مع أشياء cherrypy وتمرير FDs بينها.

أما بالنسبة لجزء HTTP ، فهناك على الأقل طرق للقيام بذلك. ربما يكون الأول هو الأسهل ، ابدأ خادم cherrypy المستقل إلى الواجهة الأمامية واستخدمه. الثاني ، الذي أعتقد أننا نريده هو وجود خادم HTTP أحادي مشترك بين الواجهة الأمامية وأجزاء البث من الكود. هذا الجزء هو المجهول الكبير حاليًا بالنسبة لي.

بمجرد وضع خادم HTTP في مكانه ، نحتاج إلى فصل المقبس عن cherrypy ، وبالنظر إلى ws4py يبدو أن إعداد request.rfile.rfile._sock = None هو الحل الأكثر احتمالاً الذي يمكننا إدارته. قبل أن نفصل ، ربما نرغب في إصدار بعض الرؤوس ، ثم نفصل fd ونرسله إلى الحوض ويجب أن نتدفق. إن النظر في كيفية تولي ws4py للمآخذ يجب أن يمكننا من معرفة التفاصيل.

الجزء الآخر غير معروف قليلاً إذا قمنا بتوسيع واجهة برمجة التطبيقات الصوتية الأساسية لدينا للسماح بإصدار FDs. هذا إما شيء متخصص لهذه الحالة فقط أو شيء أكثر عمومية يتيح الوصول إلى حاوية الإخراج التي نستخدمها.

لماذا لم أفكر في هذا سابقًا ، ليس لدي أي فكرة ، ولكن بالنسبة لسرقة المقابس ، يجب علينا فقط socket.fromfd لإنشاء نسخة جديدة بحيث يمكن إغلاق النسخة الأصلية بدون آثار سيئة.

هل هناك خطط لإضافة تدفق الإخراج في المستقبل القريب؟

أعلم أن هذا عمره أشهر ، لكن هذا هو الشيء الوحيد الذي يمنعني من التحول من الفانيليا MPD. أقوم بتشغيل MPD على الخادم الخاص بي ، والذي لا يوجد به مكبرات صوت متصلة ، وقم بضبط دفق HTTP من أجهزة كمبيوتر / أجهزة مختلفة حول المنزل وفي أي مكان آخر. أحب أن أرى هذا في موبيدي. وإذا كان موجودًا بالفعل ، يرجى توجيهي في الاتجاه الصحيح! كنت تقرأ الكتيبات لفترة من الوقت ولا يبدو أنها تجد طريقة لإنجاز هذا العمل.

AFAIK من الممكن الحصول على تدفق HTTP يعمل من Mopidy من خلال دمجه مع Icecast واثنين من الاختراقات ، موثقة على https://docs.mopidy.com/en/latest/config/#streaming -through-shoutcast-icecast

العمل مستمر على فرع بلا فجوة (انظر # 1288) والذي يجب أن يجعل Mopidy + Icecast يعمل مع الجولة التالية من التحسينات الخالية من الفجوات دون أي اختراقات للحفاظ على البث على قيد الحياة.

أريد فقط أن أتناغم مع ذلك لدي أيضًا اهتمام جاد ببث HTTP. أريد استخدامه للاستماع إلى Spotify على واجهة الويب الرائعة للدراجات البخارية ، من خادم الويب / VPN الخاص بي ، في العمل. شعرت بالضيق عندما قمت بتشغيله محليًا وسمعت الموسيقى ، ثم تلقيت الكثير من أخطاء JACK عندما حاولت تشغيله عن بُعد. إذا كنت أعرف كيفية البرمجة بشكل أفضل ، فسأحاول ذلك بنفسي. شكرا!

jodal هل تم حل المشاكل التي ذكرتها بخصوص # 1288؟

أي هل يمكن إزالة هذا الجزء من الوثائق؟

حاليًا ، لا يتعامل Mopidy مع إشارات نهاية المسار مقابل إشارات نهاية البث في GStreamer بشكل صحيح. يؤدي هذا إلى فصل دفق SHOUTcast في نهاية كل مسار ، مما يجعله عديم الفائدة تمامًا. لمزيد من التفاصيل انظر # 492. يمكنك أيضًا تجربة الحل البديل المذكور أدناه.

JohnMaguire لا أفعل إذا كان هناك قسم في مكان ما في المستندات قد نسيناه نظرًا لعدم تضمين رابط. AFAIK نسخة "التطوير" من المستندات محدثة مع التغييرات القادمة في 2.0.

آسف: https://docs.mopidy.com/en/latest/config/#streaming -through-shoutcast-icecast

يبدو أنه تم تحديثه في نسخة مطورة من المستندات ، أنت على صواب: https://docs.mopidy.com/en/develop/audio/#streaming -through-icecast

@ jodal!

أي تحديثات في العامين الماضيين؟

أي تحديثات في السنوات الخمس الماضية؟

لا ، يظل Icecast هو الحل الأفضل.

كجزء من Mopidy 3 ، قمنا بإخراج الحد الأدنى من الإصدار المدعوم من GStreamer والذي يفتح بعض الخيارات الأفضل لبث HTTP مثل hlssink2. إذا كان أي شخص مهتمًا بمتابعة هذا الأمر ، فقد يكون هذا مكانًا جيدًا للبدء.

Snapcast هو حل آخر. إنه مصمم للتشغيل متعدد الغرف ، لكنني لا أرى أي سبب لعدم إمكانية استخدامه للبث إلى عميل واحد أيضًا. لم أختبره ، لكنه يبدو واعدًا.

نعم ، لقد استخدمت ميزة snapcast. استخدام لعبة فيفو هو أمر صعب بعض الشيء وتم تطوير طريقة بديلة جديدة ولكن آخر مرة سمعت أن هذه الطريقة تأتي مع مشكلاتها الخاصة. لاحظ أيضًا أنه لا يتم بث http.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات