Video & subtitle · Perangkat Subtitle
Mengapa file subtitle diputar di VLC tetapi gagal di elemen trek HTML5
· Cara kerjanya
subtitle webvtt pemrosesan browser
Pemain desktop bersifat pemaaf; elemen track browser tidak. Posting ini menjelaskan bagaimana parser teks HTML5 membaca file WebVTT, kesalahan yang dihilangkan secara diam-diam, dan cara menyiapkan file yang diterima keduanya.
File yang sama berfungsi di VLC dan tidak menampilkan apa pun di halaman web — dua parser, dua tingkat toleransi
File teks yang diputar dengan benar di pemutar desktop dan tidak menampilkan apa pun di halaman web tidak berubah di antara keduanya. Yang berubah adalah seberapa besar toleransi yang dibawa pembaca. Pemutar desktop dibuat untuk menampilkan apa pun yang ditarik pengguna, sehingga mereka dapat menebak, memperbaiki, dan melewatinya. Elemen track HTML5 mengimplementasikan spesifikasi, dan spesifikasi yang menerima tebakan tidak akan menjadi spesifikasi.
Perbedaannya juga bukan merupakan bug. Ini adalah dua desain dengan kewajiban yang berbeda, dan konsekuensi praktisnya adalah pemutar desktop merupakan pengujian yang buruk apakah suatu file akan berfungsi di web.
Cara elemen track memuat file keterangan — permintaan, jenis MIME, CORS untuk trek lintas asal, dan pemeriksaan header WEBVTT
Elemen track mengambil file keterangan sebagai sumber daya normal, yang berarti file tersebut tunduk pada aturan yang sama seperti permintaan lainnya. Itu harus disajikan dengan jenis media WebVTT, dan file yang disajikan sebagai teks biasa ditolak apa pun isinya. Lagu yang dihosting di asal lain memerlukan header lintas asal dan atribut crossorigin pada elemen video, dan tanpanya, pengambilan akan gagal sebelum penguraian apa pun terjadi.
Kemudian muncul pemeriksaan header. File WebVTT harus dimulai dengan tanda tangan WEBVTT, secara opsional didahului dengan tanda urutan byte, dan file tanpa tanda tangan tersebut bukan file WebVTT. Ini adalah satu-satunya alasan paling umum mengapa file SRT diganti namanya menjadi ekstensi VTT tidak menampilkan apa pun: mengganti nama mengubah ekstensi dan bukan baris pertama.
Penguraian isyarat demi isyarat — apa yang dilakukan browser dengan kode waktu yang salah atau baris yang tidak terduga, dan mengapa kegagalan tersebut terjadi secara diam-diam
Penguraian setelah titik itu adalah isyarat demi isyarat, dan mode kegagalan inilah yang membuatnya membingungkan. Blok yang tidak dapat dibaca oleh parser akan dibuang dan parsing dilanjutkan. Tidak ada pengecualian, tidak ada kesalahan konsol dan tidak ada indikasi visual; isyaratnya tidak pernah muncul. File dengan empat kode waktu yang salah format dari sembilan ratus diputar hampir sempurna, dengan empat momen hening yang tampak seperti terjemahan yang hilang, bukan kesalahan format.
Inilah sebabnya mengapa gejalanya biasanya dilaporkan bersifat intermiten. Tidak ada yang terputus-putus dalam hal ini. Isyarat yang sama selalu gagal, namun karena isyarat di sekitarnya berfungsi, file terlihat berfungsi secara luas dan kesalahan dikaitkan dengan konten, bukan penguraiannya.
Kelonggaran pemain desktop — mengapa VLC dan lainnya menerima file yang secara teknis tidak valid
Pemain desktop sengaja mengambil posisi sebaliknya. Mereka menerima kedua pemisah milidetik, mentolerir garis indeks yang hilang, menyimpulkan format dari konten daripada ekstensi, memperbaiki pemesanan, dan melewatkan apa yang tidak dapat mereka gunakan tanpa keluhan. Pengguna yang menyeret file ke pemutar ingin film tersebut memiliki subtitle, bukan laporan validasi.
Pengurai toolkit berada dalam tradisi lunak yang sama pada input, menerima jam opsional, baik pemisah maupun file yang bloknya tidak beraturan. Perbedaannya adalah apa yang dilakukannya setelahnya: ia mencatat setiap kesalahan yang ditoleransi sebagai masalah yang ada, dan menulis kembali satu bentuk kanonik daripada mempertahankan ketidakteraturan yang diterimanya.
Contoh praktis: file dengan tiga kesalahan umum — mengujinya di browser dan melihat isyarat mana yang hilang
Ambil file dengan tiga kesalahan: tidak memiliki header WEBVTT, satu isyarat memiliki bidang detik tujuh puluh lima, dan satu isyarat berakhir sebelum dimulai. Di pemutar desktop, file diputar, detik-detik yang mustahil diperbaiki atau dilewati secara diam-diam dan isyarat terbalik berkedip atau dijatuhkan. Penonton melihat subtitle.
Di elemen track, header yang hilang segera mengakhirinya; tidak ada satu pun isyarat yang ditampilkan, karena file tersebut tidak pernah diterima sebagai WebVTT. Tambahkan header dan gambar berubah: sebagian besar isyarat muncul, isyarat dengan tujuh puluh lima detik dibuang selama penguraian, dan isyarat terbalik diuraikan tetapi tidak pernah ditampilkan karena tidak memiliki durasi untuk ditampilkan. Nama validasi sebelum Anda memuat halaman, melaporkan kode waktu yang mustahil dan isyarat yang berakhir sebelum dimulai, masing-masing berdasarkan nomor.
Apa yang tidak tercakup di sini — penataan gaya dengan ::cue, pengaturan posisi, dan teks langsung
Ini mencakup apakah isyarat dimuat, bukan tampilannya. Penataan gaya melalui elemen semu isyarat, pengaturan posisi dan perataan pada baris kode waktu, definisi wilayah, dan teks vertikal semuanya merupakan masalah terpisah yang hanya penting setelah file diurai. File yang tidak menampilkan apa pun bukanlah masalah penataan gaya, dan penataan gaya tidak akan menyelamatkannya.
Teks langsung dan streaming juga tidak termasuk dalam hal ini. Trek teks tersegmentasi yang dikirimkan bersama aliran adaptif memiliki model pengirimannya sendiri, dan file statis yang dimuat oleh elemen trek bukanlah cara mereka menjangkau pemutar.
Kesimpulan: bersiaplah untuk penguraian yang paling ketat — bagaimana konversi dan pembersihan Perangkat Subtitle menghasilkan file yang diterima elemen trek
Bersiaplah untuk parser yang paling ketat daripada yang paling pemaaf, karena parser yang ketat adalah yang digunakan audiens Anda. Konversikan ke WebVTT dengan benar sehingga baris tanda tangan ditulis, bukan diasumsikan, sajikan dengan jenis media yang benar, dan tambahkan header lintas asal jika file berada di host lain.
Jalankan konversi dan baca masalah yang dilaporkan sebelum pengiriman. Konverter menulis stempel waktu kanonik dengan pemisah yang diperlukan format, memberi nomor ulang isyarat secara berurutan dan melaporkan kesalahan yang harus ditoleransi, yang merupakan daftar isyarat yang akan hilang secara diam-diam di browser. Kemudian muat ulang halaman dan bandingkan jumlah isyarat dengan sumbernya daripada percaya bahwa teks muncul.