Jenis buffer apa yang harus saya terapkan untuk perangkat audio streaming satu arah?

8

Saya sedang mengerjakan proyek di mana data audio dialirkan ke perangkat. Data audio dikodekan melalui opus dan dialirkan pada 20 ms payload sekaligus. Streaming dilakukan melalui TCP untuk menghindari hilangnya paket sepenuhnya. Tujuan streaming adalah sedekat mungkin dengan streaming audio langsung, tanpa kehilangan audio, atau jittering.

Saat ini apa yang terjadi pada koneksi Internet yang lebih lambat, audio mungkin sedikit gugup. Saya tidak menggunakan buffer apa pun saat ini, tetapi tujuannya adalah untuk dapat sedekat mungkin dengan "live streaming" tetapi pada saat yang sama menghilangkan jitter.

Saya telah melihat buffer jitter, dan tampaknya buffer jitter juga seharusnya menangani penundaan di kedua ujungnya sehingga kedua ujungnya tidak sinkron, yang kedengarannya seperti kerja keras yang berlebihan untuk situasi saya. Saya khawatir jika saya membuat ukuran buffer statis, itu akan menghilangkan aspek streaming langsung jika ini tidak perlu.

Jadi ini meninggalkan saya dengan beberapa pertanyaan, yang entah bagaimana semuanya terkait.

  1. Apa metode atau algoritma yang baik untuk mendeteksi panjang buffer?
  2. Apa cara terbaik untuk mulai memasukkan data ke decoder di ujung penerima? Apakah ketika buffer mencapai jumlah milidetik penuh, itu akan mulai memberi makan data dalam 20 ms payloads?
  3. Apakah saya menunda bermain jika buffer kurang terisi?
  4. Apakah buffer dalam byte atau panjang waktu?

Terima kasih banyak!

Mikey A. Leonetti
sumber
1
Sebenarnya, bagaimana hidup itu? Bahkan jika Anda memiliki buffer 10 detik, apakah ada yang memperhatikan? Beberapa acara TV langsung tertunda hampir selama itu karena alasan kontrol konten (yaitu kata-kata kotor).
Robert Harvey
1
"Streaming dilakukan melalui TCP untuk menghindari hilangnya paket sepenuhnya." - TCP tidak menghindari packet loss, ia bekerja di sekitar packet loss.
user253751

Jawaban:

1

Ini sepenuhnya tergantung pada throughput jaringan Anda - jika Anda dapat menyimpan satu detik dari data yang terisi maka itu yang Anda butuhkan! Tentunya, Anda perlu menentukan berapa lama jaringan Anda akan gagap dan tidak mengisi buffer. Uji dan lihat.

Kalau tidak, mungkin lebih mudah untuk mengkonfigurasi ukuran buffer, jaringan cepat dapat memiliki buffer kedua (tidak ada yang akan melihat audio 1 detik di belakang penangkapan) dan lambat latensi tinggi atau jaringan throughput yang buruk dapat menambah buffer lebih. Anda mungkin dapat mengubah ukuran buffer selama pemutaran jika itu benar-benar kosong, tetapi Anda kemungkinan besar akan gagap pemutaran terus-menerus dalam kasus ini.

Umumnya Anda hanya menunda bermain jika buffer benar-benar kosong. Tidak ada gunanya memiliki buffer jika Anda tidak menggunakannya.

Jika audio Anda adalah paket 20ms, maka ukuran == waktu.

gbjbaanb
sumber