Banyak pengguna pusat media KODI, yang merupakan bagian dari RetroOrangePi, mungkin memperhatikan bahwa mereka menggunakan pemutar MPV eksternal, yang, tidak seperti yang biasa, memiliki dukungan pengodean perangkat keras. Ini memungkinkan Anda untuk memutar konten 1080P tanpa lag, tetapi ada masalah besar - satu-satunya cara untuk mengontrol pemutar adalah melalui keyboard. Selain itu - pemain bahkan tidak memiliki GUI minimum, jadi berapa lama film yang Anda tonton, dan berapa banyak yang tersisa sampai akhir - sayangnya, Anda tidak bisa mengetahuinya.
Saya akui bahwa saya adalah orang yang sangat malas, dan sangat tidak nyaman untuk membawa keyboard bersama saya, mengingat bahwa KODI sendiri dikendalikan dari telepon. Setelah googled beberapa menit, saya terkejut mengetahui bahwa tidak ada solusi siap pakai untuk kontrol MPV jarak jauh dari smartphone. Nah, apa yang harus dilakukan - Anda harus menulis sendiri. Ngomong-ngomong, ternyata, di pusat Vitebsk untuk membeli keyboard nirkabel yang murah selama 1 jam istirahat makan siang - itu tugas lain.
MPV mendukung beberapa bahasa scripting, salah satunya adalah Lua. Di Github, saya menemukan proyek
mpv-network-commands , ditulis dalam Lua dan yang memungkinkan Anda untuk mengontrol minimum fungsi MPV menggunakan perintah yang dikirim melalui UDP. Setelah memastikan bahwa itu berfungsi, selama istirahat makan siang saya menulis aplikasi sederhana yang menerapkan fungsi paling primitif - pada kenyataannya, itu memungkinkan Anda untuk jeda, mulai pemutaran dari jeda dan tutup pemain.
Itu terlihat seperti ini.
Agar dapat memutar balik video, serta melihat bilah kemajuan, saya harus memodifikasi skrip asli dengan menambahkan fungsi berikut:
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
Yang lucu adalah bahwa kode yang memproses data yang masuk dari sisi ponsel ternyata jauh lebih rumit:
Dan ini masih tanpa kode penghitung waktu 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()) } }
Hasilnya adalah ini:
Kode sumber, serta apk, ada di
github .
Saya memperingatkan Anda segera -
mungkin ada bug tertentu.
Kerugian utama adalah bahwa Anda memerlukan IP tetap untuk telepon di jaringan lokal tempat OrangePi beroperasi. Hal ini diperlukan agar skrip tahu ke mana harus mengirimkan informasi tentang file yang sedang diputar. Cara termudah - dalam pengaturan server DHCP router Anda, tentukan untuk memberikan perangkat IP yang sama dengan alamat MAC telepon.
Juga tidak ada elemen keamanan - setiap pengguna di jaringan Anda dapat menjeda video atau menutup pemutar, mengetahui IP dari pusat media. Benar, untuk mengetahui apa yang direproduksi dan apakah itu direproduksi sama sekali - tidak.
Omong-omong, penggunaan pertukaran data melalui UDP tanpa konfirmasi menimbulkan efek samping - karena menerima data yang masuk dari pemutar berputar dalam aliran yang terpisah, Anda dapat menjeda / menutup pemain meskipun skrip server tidak menunjukkan alamat IP yang benar dari ponsel Anda. Yang utama adalah Anda akan tahu IP dari pusat media Anda.
InstalasiPergi ke Desktop RetroOrangePi. Pertama, Anda perlu menginstal Lua dan LuaSocket.
sudo apt-get install lua5.1 luasocket
Lalu pergi ke direktori /home/pi/.config/mpv/ dan buat direktori lua di sana.
Dalam lua, salin server.lua.
Buka server.lua dengan nano yang sama dan sejalan
conn_up:sendto(title.."$"..length.."$"..pos, "192.168.100.168", 756);
ganti alamat IP dengan alamat telepon Anda.
Simpan dan mulai ulang OrangePi.
Instal aplikasi di ponsel Anda. Rakitan apk terletak di Github. Jalankan, buka Pengaturan. Setel di sana IP pusat media Anda dan port 755. Klik Simpan.
Semuanya bisa digunakan.