نحن نكتب طلبًا للتحكم عن بُعد في مشغل MPV من RetroOrangePi

ربما لاحظ العديد من مستخدمي مركز وسائط KODI ، وهو جزء من RetroOrangePi ، أنهم يستخدمون مشغل MPV خارجي ، والذي ، على عكس العادي ، لديه دعم فك تشفير الأجهزة. يتيح لك هذا تشغيل محتوى 1080P بدون تأخيرات ، ولكن هناك مشكلة كبيرة - الطريقة الوحيدة للتحكم في المشغل هي من خلال لوحة المفاتيح. علاوة على ذلك - لا يحتوي المشغل حتى على حد أدنى لواجهة المستخدم الرسومية ، لذا ما هي مدة الفيلم الذي تشاهده ، والكم المتبقي حتى النهاية - للأسف ، لا يمكنك معرفة ذلك.

أعترف بأنني شخص كسول جدًا ، ومن غير المريح جدًا حمل لوحة المفاتيح معي ، نظرًا لأن KODI نفسها يتم التحكم فيها من الهاتف. بعد أن غوجل بضع دقائق ، فوجئت عندما علمت أنه لا توجد حلول جاهزة للتحكم عن بعد في MPV من هاتف ذكي. حسنًا ، ماذا تفعل - عليك أن تكتب نفسك. بالمناسبة ، كما اتضح ، في وسط فيتيبسك لشراء لوحة مفاتيح لاسلكية غير مكلفة لمدة ساعة واحدة من استراحة الغداء - هذه مهمة أخرى.

يدعم MPV العديد من لغات البرمجة النصية ، أحدها Lua. في Github ، عثرت على مشروع أوامر mpv-network-أوامر مكتوبة بلغة Lua ويسمح لك بالتحكم في الحد الأدنى من وظائف MPV باستخدام الأوامر المرسلة عبر UDP. بعد التأكد من أنه يعمل ، أثناء استراحة الغداء ، كتبت تطبيقًا بسيطًا نفذ الوظائف الأكثر بدائية - في الواقع ، سمح لك بالتوقف مؤقتًا وبدء التشغيل من الإيقاف المؤقت وإغلاق المشغل.


بدا شيء من هذا القبيل.

لكي أتمكن من إرجاع الفيديو ، وكذلك رؤية شريط التقدم ، اضطررت إلى تعديل النص الأصلي عن طريق إضافة الوظيفة التالية:

function send_name() local title =mp.get_property("media-title"); local length = math.floor(mp.get_property("length")); local pos=math.floor(mp.get_property("time-pos")); conn_up:sendto(title.."$"..length.."$"..pos, "192.168.100.168", 756); end 

الشيء المضحك هو أن الرمز الذي يعالج البيانات الواردة من جانب الهاتف تبين أنه أكثر تعقيدًا:

وهذا لا يزال بدون رمز مؤقت
  thread { // this thread receives incoming massages from MPV and updates views accordingly to received info try { chnl.socket().bind(InetSocketAddress(756)) chnl.configureBlocking(false) var timerStarted: Boolean = false var timer = Timer() while (true) { var buf = ByteBuffer.allocate(1024) buf.clear() var last_pos = "" if (!timerStarted) { timer = Timer() timer.schedule(myTimerTask(textView5, textView6, textView4, seekBar3), 2000, 1000) //this timer will clear views, if no info received in last 2 seconds timerStarted = true } if (chnl.isOpen) { if (chnl.receive(buf) != null) { if (timerStarted) { timer.cancel() timerStarted = false } var data_length = buf.position() buf.flip() var str = String(buf.array(), 0, data_length, UTF_8) Log.d("received data", str) val arr = str.split("$") if (arr.size >= 3) { media_length = arr[1].toInt() runOnUiThread { if (textView4.text != arr[0]) textView4.text = arr[0] if (last_pos != arr[1]) { last_pos = arr[1] textView6.text = convertSecsToFullTime(last_pos) } if (!blockview) { textView5.text = convertSecsToFullTime(arr[2]) seekBar3.max = arr[1].toInt() seekBar3.progress = arr[2].toInt() } } } } } } } catch (e: Exception) { runOnUiThread { Toast.makeText(this, e.message, Toast.LENGTH_SHORT).show() } Log.d("In MPVremote", e.message.toString()) } } 


والنتيجة هي:


رموز المصدر ، وكذلك apk ، موجودة على جيثب .

أحذرك على الفور - قد يكون هناك بعض الأخطاء.

العيب الرئيسي هو أنك تحتاج إلى IP ثابت للهاتف على الشبكة المحلية التي يعمل عليها OrangePi. من الضروري أن يعرف البرنامج النصي مكان إرسال معلومات حول الملف الجاري تشغيله. أسهل طريقة - في إعدادات خادم DHCP لجهاز التوجيه ، حدد إعطاء أجهزة IP نفسها مع عنوان MAC الخاص بالهاتف.

لا توجد أيضًا عناصر أمان - يمكن لأي مستخدم على شبكتك إيقاف الفيديو مؤقتًا أو إغلاق المشغل ، مع معرفة IP الخاص بمركز الوسائط. صحيح ، لمعرفة ما هو مستنسخ وما إذا كان مستنسخة على الإطلاق - لا.

بالمناسبة ، يؤدي استخدام تبادل البيانات عبر UDP دون أي تأكيد إلى تأثير جانبي - نظرًا لأن تلقي البيانات الواردة من المشغل يدور في دفق منفصل ، يمكنك إيقاف / إيقاف المشغل مؤقتًا حتى إذا لم يشير البرنامج النصي للخادم إلى عنوان IP الصحيح لهاتفك. الشيء الرئيسي هو أنك ستعرف IP الخاص بمركز الوسائط الخاص بك.

التثبيت

انتقل إلى Desktop RetroOrangePi. تحتاج أولاً إلى تثبيت Lua و LuaSocket.

 sudo apt-get install lua5.1 luasocket 

ثم انتقل إلى الدليل /home/pi/.config/mpv/ وأنشئ دليل lua هناك.

في lua ، انسخ server.lua.

افتح server.lua بنفس النانو وفي الطابور

 conn_up:sendto(title.."$"..length.."$"..pos, "192.168.100.168", 756); 

استبدل عنوان IP بعنوان هاتفك.

احفظ OrangePi وأعد تشغيله.

قم بتثبيت التطبيق على هاتفك. ملف apk الذي تم تجميعه يقع على Github. قم بتشغيله ، انتقل إلى الإعدادات. قم بتعيين IP الخاص بمركز الوسائط والمنفذ 755. انقر فوق حفظ.

كل شيء يمكن استخدامه.

Source: https://habr.com/ru/post/ar423765/


All Articles