Pertanyaan Bagaimana cara menyinkronkan pemutaran media melalui jaringan yang tidak dapat diandalkan?


Saya berharap saya dapat memutar musik atau video di satu komputer, dan memiliki komputer kedua yang memainkan media yang sama, disinkronkan. Seperti pada, saya dapat mendengar kedua speaker komputer pada saat yang sama, dan itu tidak terdengar lucu.

Saya ingin melakukan ini melalui Wi-Fi, yang sedikit tidak dapat diandalkan.

Algoritma, apa pendekatan terbaik untuk masalah ini?

EDIT 1

Apakah kedua komputer "memainkan" media yang sama, atau satu "memainkan" media dan mengalirkannya ke yang lain, tidak masalah bagi saya.

Saya yakin ini adalah masalah yang sulit dilakukan karena saya pernah melihat demo speaker Wi-Fi. Itu sudah lebih dari 5 tahun yang lalu, jadi saya pikir teknologi ini akan membuatnya lebih mudah hari ini.


5
2018-02-28 22:12


asal


Jawaban:


(Saya sendiri sedang mencari aplikasi yang melakukan ini, berharap saya tidak perlu menulis sendiri, ketika saya menemukan pertanyaan ini.)

ikhtisar

Anda memperkenalkan sedikit penyangga latensi dan menggunakan protokol sinkronisasi waktu jaringan untuk menyelaraskan aliran. Yaitu, Anda membagi aliran menjadi paket, dan stempel waktu masing-masing paket dengan "putar nanti pada waktu T", di mana T misalnya 50-100ms di masa depan (atau lebih jika jaringan itu glitchy). Anda mengirim (atau multicast) paket-paket di jaringan lokal, ke semua komputer di chorus. Komputer akan memainkan semua suara pada saat yang sama karena jam aplikasi disinkronkan.

Perhatikan bahwa mungkin ada faktor lain seperti latensi OS / driver / soundcard yang mungkin harus diperhitungkan dalam protokol sinkronisasi waktu. Jika Anda tidak terlalu cerdas, protokol sinkronisasi mungkin sederhana seperti satu komputer berbunyi setiap detik - plus Anda menekan tombol pada komputer lain dalam ketukan. Ini memiliki keuntungan akuntansi untuk setiap sumber lag lain di lapisan OS / driver / soundcard, tetapi memiliki kerugian bahwa intervensi manual diperlukan jika jam menjadi tidak sinkron.


sinkronisasi jaringan manual hybrid

Salah satu cara untuk memperhitungkan sumber latensi lain, tanpa intervensi manual konstan, adalah menggabungkan pendekatan ini dengan protokol sinkronisasi jaringan-jam standar; saat pertama kali Anda menjalankan protokol pada mesin baru:

  1. sinkronkan mesin dengan intervensi gaya beat manual
  2. menyinkronkan mesin dengan protokol sinkronisasi jaringan-jam
  3. untuk setiap mesin di chorus, ambil perbedaan dari dua sinkronisasi; ini adalah latensi OS / driver / soundcard dari masing-masing mesin, yang masing-masing mereka lacak

Sekarang kapanpun jaringan tulang punggung berubah, semua yang perlu dilakukan adalah menyinkronkan ulang menggunakan protokol sinkronisasi jam-jaringan (#2), dan kurangi latensi OS / driver / soundcard, meniadakan kebutuhan akan intervensi manual (kecuali Anda mengubah OS / driver / soundcard).


sinkronisasi firefly yang meniru alam

Jika Anda melakukan ini di ruangan yang tenang dan semua mesin memiliki mikrofon, Anda bahkan tidak perlu intervensi manual (#1), karena Anda dapat memiliki semuanya mengikuti algoritme sinkronisasi "gaya kunang-kunang". Banyak spesies kunang-kunang di alam semua akan berkedip serentak. http://tinkerlog.com/2007/05/11/synchronizing-fireflies/ menjelaskan algoritma yang digunakan kunang-kunang ini: "Jika kunang-kunang menerima kilatan kunang-kunang tetangga, itu berkedip sedikit lebih awal." Kilat sesuai dengan bip atau buzz (melalui soundcard, bukan mobo piezo buzzer!), Dan melihat sesuai untuk mendengarkan melalui mikrofon.

Ini mungkin agak canggung karena jarak ruangan yang sangat besar karena kecepatan suara, tapi saya ragu itu akan menjadi masalah (jika demikian, tingkat penurunan bunyi bip).


6
2018-06-29 02:19



Sinkronisasi relatif terhadap posisi pendengar relatif terhadap setiap pembicara. Saya tidak berpikir keandalan jaringan akan memiliki banyak kaitannya dengan sinkronisasi ini karena akan konten dari aliran audio. Untuk melakukan sinkronisasi, Anda perlu mencari jarak antara setiap pembicara dan pendengar. Temukan perbedaan antara masing-masing nilai dan nilai untuk pembicara terjauh. Untuk setiap perbedaan 1,1 kaki, tunda setiap speaker dekat dengan 1ms. Ini akan memastikan bahwa aliran audio mencapai pendengar pada saat yang bersamaan. Ini semua mengasumsikan area terbuka, karena setiap di dekat skenario Anda akan menghasilkan refleksi dari gelombang audio dan menciptakan interferensi destruktif. Objek di dalam area tersebut juga dapat mengirimkan suara pada kecepatan yang lebih lambat sehingga menghasilkan suara yang tertunda sendiri.


0
2018-02-28 22:29