HN Dibuka: Winamp dan pemutar media lain yang direka ulang untuk web dengan Web Components
(player.style)- player.style adalah kumpulan tema pemutar video dan audio berbasis Media Chrome yang dapat diterapkan dengan cara yang sama di berbagai pemutar web dan framework aplikasi
- Setelah memilih tema pemutar yang diinginkan lalu memilih pemutar dan framework, alurnya berlanjut ke kode yang bisa langsung disalin-tempel
- Tema dapat dipersempit berdasarkan Video/Audio, HTML, React, Next.js, Vue, Svelte serta kondisi seperti timeline thumbnails, AirPlay, Google Cast, chapter, dan tooltip
- UI pemutar dapat disesuaikan hanya dengan HTML dan CSS, dan juga menyediakan pengaturan warna tema seperti Primary, Secondary, dan Accent
- Pengalaman pemutar media yang sudah ada seperti Sutro, Instaplay, Notflix, YT, Minimal, dan Winamp direka ulang menjadi tema web agar bisa diterapkan dengan cepat
Cara menggunakan dan mengustomisasi player.style
- player.style menyediakan tema pemutar video dan audio yang dibuat dengan Media Chrome
- Cakupan sasarannya adalah “every web player” dan “every web app framework”
- Alur penerapannya terdiri dari 3 langkah sederhana
- Pilih tema pemutar yang disukai
- Pilih pemutar dan framework aplikasi yang akan digunakan
- Salin-tempel kode yang dihasilkan
- UI pemutar dapat disesuaikan secara detail hanya dengan HTML dan CSS
- Opsi filter dan pengaturannya mencakup hal-hal berikut
- Media: Video, Audio
- Framework: HTML, React, Next.js, Vue, Svelte
- Fitur: timeline thumbnails, AirPlay, Google Cast, chapters, tooltips
- Warna: Primary, Secondary, Accent
Galeri tema pemutar web
- Sutro: tema modern dan elegan yang namanya diambil dari antena TV di SF
- X-mas: tema Natal dengan nuansa merah-hijau, lampu berkelap-kelip, dan suasana akhir tahun
- Halloween: tema yang menambahkan nuansa Halloween ke pemutar video
- Instaplay: tema mobile-first yang terinspirasi dari pengalaman pemutaran aplikasi media sosial populer
- Sutro Audio: tema audio dengan deskripsi yang sama seperti Sutro
- Notflix: tema yang mengisyaratkan pengalaman tanpa “huruf N merah besar” dan bus panjang menuju Los Gatos
- Reelplay: tema pemutar media retro yang terinspirasi dari pemutar media masa lalu
- Vimeonova: tema yang menafsirkan ulang desain klasik pemutar Vimeo
- YT: penghormatan pada pemutar YouTube modern yang banyak digunakan, direka ulang sedekat mungkin dengan Web Components
- Tailwind Audio: tema pemutar audio minimalis yang dibuat dengan Tailwind CSS
- Demuxed 2022: tema pemutar media yang dibuat untuk Demuxed 2022
- Microvideo: tema yang cocok untuk konten pendek yang tidak memerlukan kontrol pemutaran kuat seperti pada konten panjang
- Minimal: tema sederhana yang merampingkan pengalaman Mux Player menjadi kontrol dasar yang dibutuhkan penonton
- Winamp: tema retro yang terinspirasi dari pemutar media klasik Winamp
1 komentar
Komentar Hacker News
Kalau yang dibutuhkan hanya musik, bukan video, https://webamp.org/ juga layak dilihat
Tidak perlu “mengompilasi” atau “mengintegrasikan” secara muluk-muluk; cukup disertakan saja, lalu playlist dibuat oleh aplikasi. Contoh: Music
Saya suka ide ini dan terima kasih sudah merilisnya dengan lisensi MIT
Kebetulan saya sedang membuat aplikasi media, tepatnya editor video, dan dulu juga pernah membuat beberapa video player dengan Flash dan HTML/JS. Sekitar 2015 saya pernah mencoba web component di salah satu player, tetapi terus-menerus terasa menyakitkan, jadi akhirnya kembali ke JavaScript biasa. Anehnya, di aplikasi media saya sekarang saya memakai web component seperti timeline editor video, dan sejauh ini berjalan cukup baik. Saya tidak begitu tahu apa yang berubah, atau apakah berkat perkembangan web yang lambat kompatibilitasnya akhirnya sudah cukup meningkat
Saya sudah menelusuri dokumentasi Media Chrome dan sekilas melihat repositori GitHub-nya, dan saya menyukai prinsip desain serta catatan arsitekturnya. Saat mengadopsi hal seperti ini, terutama sebagai orang yang sudah beberapa kali membuat sendiri benda seperti ini, kekhawatiran terbesar saya adalah ekstensibilitas dan ukuran file. Misalnya, saya penasaran seberapa sulit menyesuaikan komponen timeline saya dengan paradigma MediaController. Jika semuanya dibuat sendiri, keuntungannya adalah hanya ada hal yang dibutuhkan dan tidak lebih. Media Chrome pasti punya banyak fitur yang tidak akan pernah saya pakai, jadi pertanyaannya adalah seberapa banyak beban yang tidak perlu yang harus ikut saya tanggung karena itu. Bukan hanya komponen yang tidak dipakai, tetapi juga fitur yang tidak dipakai di dalam komponen yang dipakai. Kadang fitur bawaan yang tidak perlu juga menghalangi ekstensibilitas pada level yang lebih rendah
Selain itu, repositori
media-elements[1] tidak memiliki file lisensi. Di package.json disebutkan bahwa elemen-elemennya juga MIT, tetapi file LICENSE yang eksplisit selalu lebih baikMeski begitu, ini library yang cukup menarik. Setidaknya sejauh ini halaman yang menyertakannya yang merangkai elemen-elemen tersebut, dan karena saya memang sedang menginginkan abstraksi yang lebih baik, sepertinya saya akan mencuri ide membungkus komponen-komponen saya dengan elemen seperti media-controller
Di antaranya ada spesifikasi web component v2, tetapi saya bukan ahli soal apa saja yang berubah. Sekarang kita mulai melihat web component di mana-mana, terutama di media player. Contohnya web player Apple
Senang mendengar Anda menyukai arsitektur controller. Versi awalnya memakai pendekatan semua elemen langsung menunjuk ke elemen media, dan setelah controller masuk, semuanya jadi jauh lebih rapi. Setidaknya dibanding cara yang dulu saya pakai, saya sangat merekomendasikannya
UI editor video menurut saya adalah perluasan alami dari keluarga Media Chrome. Akan bagus jika Anda meninggalkan issue di repositori tentang apa yang akan lebih membantu untuk sisi itu
Saya sangat memahami rasa ragu mengadopsi sesuatu seperti Media Chrome karena fleksibilitas masa depan dan ukuran. Kalau saya, ada 3 poin yang bisa meyakinkan. 1) Anda bisa hanya menyertakan komponen UI yang diperlukan, dan ini perbedaan besar dari sisi ukuran dibanding video player web lain. 2) Para pengembang player paling berpengalaman sedang mengerjakannya, termasuk aspek seperti aksesibilitas dan internasionalisasi ke depannya. 3) Kami berusaha membuatnya sangat bisa dikonfigurasi lewat kombinasi slot, CSS parts, dan variabel CSS
Tentu tidak akan bisa mengalahkan ukuran file perangkat lunak yang sepenuhnya kustom, tetapi setelah semua fitur dasar lengkap, saya rasa jaraknya bisa cukup dekat. Terima kasih sudah memberi tahu soal lisensi elements
Strategi pemasaran Mux itu cerdas
Mereka mengakuisisi atau membuat proyek open source agar developer yang mencari paket video pada akhirnya mengenal nama perusahaan mereka
Contoh lain yang baru-baru ini saya lihat adalah https://github.com/cookpete/react-player
Sebagian fenomena yang terlihat di ranah player open source terjadi karena bagaimanapun juga kami perlu mendukung proyek-proyek seperti itu. Karena kami tidak terikat pada player tertentu, pelanggan kami memakai berbagai proyek open source, termasuk yang pemeliharaannya tidak terlalu aktif
Saat ini sangat sedikit perusahaan video yang berfokus pada developer yang aktif berkontribusi ke open source, jadi saya rasa kami diuntungkan oleh itu
Mux terlihat bagus, tetapi saya tidak percaya perusahaan itu akan terus mempertahankan tier encoding video gratis, jadi rasanya saya tidak akan membangun sesuatu di atasnya
Encoding on-demand untuk pengguna juga terasa agak tidak masuk akal dari sisi sumber daya. Model starter strukturnya membeli kredit senilai 100 dolar dengan 10 dolar. Semuanya terlihat seperti loss leader besar, dan makin sulit memercayai perusahaan yang tampaknya membakar uang setiap hari. Saya justru lebih suka kalau mereka mengenakan biaya, setidaknya sesuatu. Saya tahu encoding itu tidak gratis. Atau kalau di situs ada bagian yang menjelaskan bagaimana mereka bisa tetap berbisnis sambil memasang harga lebih rendah daripada semua pemain di industri, itu bisa cukup mengurangi kecurigaan. Sudah terlalu sering saya kena getah SaaS
“Bagian yang menjelaskan bagaimana mereka bisa tetap berbisnis sambil memasang harga lebih rendah daripada semua pemain di industri” adalah masukan yang sangat bagus, dan akan saya masukkan ke daftar tugas. Itu memang harus ada
Kami tidak akan menawarkan harga dengan keekonomian yang tidak sanggup kami tanggung, dan setidaknya harus ada jalur yang jelas untuk menanggungnya. Semua harga berdasarkan volume dipublikasikan, jadi kalau Anda memahami konsep seperti kredit, semestinya Anda tidak akan mengalami perubahan harga di balik umpan. Ini kebalikan dari sebagian pesaing yang mengejutkan pengguna dengan harga baru ketika skalanya membesar. Saya sangat tidak suka cara seperti itu
Secara internal, kami punya keunggulan karena menggunakan just-in-time encoding dan optimisasi tingkat lanjut lainnya. Ada juga economies of scale, dan kami berencana menulis artikel terkait itu
Namun persepsi pelanggan memang sulit. Sebagian pelanggan memahami encoding dan biayanya, serta manfaat seperti adaptive streaming atau penanganan unggahan buatan pengguna. Banyak developer baru mengenal video dan mengira biayanya akan sama seperti mengunggah MP4 ke S3. Ada yang menunjuk pesaing tanpa biaya encoding, ada yang bilang semestinya lebih murah karena YouTube. Dulu Mux mengenakan biaya encoding, sehingga dikategorikan sebagai “opsi mahal”. Karena itu kami sedang membuat struktur harga baru: mulai dari level encoding yang lebih rendah tetapi ekonominya sanggup ditanggung, lalu jika dinilai bernilai, pelanggan bisa memilih level biaya/nilai encoding yang lebih tinggi. Sebagian sudah diluncurkan dan sebagian masih direncanakan
Kami percaya video seharusnya hadir di lebih banyak tempat daripada sekarang, tetapi dibanding banyak biaya lain saat membuat aplikasi, video memang secara inheren mahal. Jadi kami melihat tugas kami adalah terus menurunkan biaya dan menyempurnakan struktur harga agar video bisa dipakai untuk lebih banyak use case
Trade-off saat memakai encoding gratis dirangkum di sini: https://docs.mux.com/guides/use-video-quality-levels. Encoding basic yang gratis pun tetap dikenai biaya penyimpanan dan transfer. Kami berharap, dengan membantu menekan biaya saat memulai, kami bisa ikut tumbuh bersama
Encoding on-demand, alias JIT encoding, benar-benar terasa seperti sulap kalau melihat seberapa konsisten ia bekerja dengan baik
Saya bekerja di Mux
Di sini ada beberapa bagian penanganan focus yang agak aneh. Semoga ini diterima sebagai kritik konstruktif, dan semuanya punya masalah yang sama
Kalau mengklik video itu sendiri, tombol panah kiri/kanan bisa dipakai untuk menavigasi video maju-mundur. Panah atas/bawah tidak melakukan apa-apa
Kalau mengklik navigation bar, tombol panah kiri/kanan berhenti berfungsi. Sebagai gantinya, tombol panah atas/bawah mulai rewind/fast-forward dengan interval waktu berbeda
Kalau mengklik area kosong seperti bar biru yang terlihat seperti Windows 98 pada contoh Winamp atau Reelplay, semua kontrol ini berhenti berfungsi dan play/pause dengan spacebar juga tidak bisa
Saya mengeceknya di Chrome terbaru di macOS
Secara umum situasinya agak rumit karena ada tumpang tindih antara “shortcut key” untuk mengontrol video, kontrol aksesibilitas tiap komponen, dan ekspektasi aksesibilitas umum untuk seluruh halaman. Misalnya, saat player memiliki focus, apakah panah atas/bawah harus selalu ditangkap untuk kontrol volume, atau tidak karena orang berharap memakainya untuk scroll halaman
Bagaimanapun, bagian ini perlu terus kami iterasi dan perbaiki ke depannya, jadi masukannya membantu
Player.style luar biasa
Di startup saya sebelumnya, saya sempat mulai membuat sendiri tema video.js, lalu beberapa jam kemudian memutuskan itu tidak sepadan dengan waktu saya dan memakai default. Ke depannya, tema-tema seperti ini tampaknya akan menjadi titik awal yang jauh lebih baik saat membuat sesuatu yang lebih kustom
Mumpung ada para pakar video di thread ini, saya penasaran apakah ada implementasi player yang memungkinkan scrubbing cepat dan mulus dengan audio
Maksud saya fitur yang mirip dengan menelusuri atau melihat timeline di Adobe Premiere pada 16x speed. Mungkin perlu secara agresif melakukan preload sesuatu seperti track audio mono 16kHz dan format video 240p yang hanya berisi sprite 1fps atau I-frame, lalu beralih ke itu saat scrubbing
Tidak ada jawaban pasti, tetapi mungkin ada baiknya melihat ranah WebCodecs, tempat contoh-contoh berperforma baik di level yang lebih rendah sedang dibuat: https://developer.mozilla.org/en-US/docs/Web/API/WebCodecs_A...
Web components itu luar biasa, dan Mux melakukan hal-hal keren dengannya
Kode dapat disesuaikan agar bekerja bersama embed YouTube
Cukup atur hal berikut pada
srcembed YouTubecontrols=0– menghapus kontrol pemutar seperti putar, jeda, dan volumemodestbranding=1– meminimalkan logo YouTube di dalam pemutarrel=0– mencegah video terkait ditampilkan di akhir. Hanya berfungsi dengan cara menampilkan video dari kanal yang samashowinfo=0– menghapus judul video dan informasi pengunggah. Parameter ini sudah dihentikan, tetapimodestbrandingmembantufs=0– menonaktifkan tombol layar penuhiv_load_policy=3– menyembunyikan anotasi video seperti notifikasi pop-upSetelah itu, di kode cukup deteksi URL embed YouTube, lalu buat pemutar dengan
iframealih-alih tagvideo. Terakhir, petakan kontrol pemutar ke YouTube Embed API. Plyr.io juga melakukan hal serupaMembuat sesuatu yang agak mirip dengan Winamp tidak berarti itu menjadi Winamp