All Products
Search
Document Center

Object Storage Service:Membuat aliran HLS menggunakan OSS

Last Updated:May 07, 2026

Object Storage Service (OSS) memungkinkan Anda mengingest aliran audio dan video ke dalam bucket melalui RTMP serta menyimpannya dalam format HLS. OSS juga menyediakan berbagai mekanisme autentikasi dan otorisasi untuk kontrol akses detail halus terhadap data audio dan video Anda.

Prasyarat

Buat bucket. Untuk informasi selengkapnya, lihat Create buckets.

Operasi dasar

OSS mendukung penggunaan RTMP untuk mengunggah video yang dikodekan dengan H.264 dan audio yang dikodekan dengan AAC. Anda kemudian dapat mengakses data media tersebut menggunakan PlayURL.

  • Unggah data audio dan video

    1. Panggil operasi PutLiveChannel untuk membuat LiveChannel.

      Operasi ini mengembalikan PublishURL untuk ingest RTMP dan PlayURL untuk pemutaran.

    2. Gunakan PublishURL untuk mengingest aliran audio dan video.

      OSS mengonversi aliran yang diunggah ke format HLS, yang terdiri dari satu file indeks M3U8 dan beberapa segmen video TS. Untuk informasi selengkapnya, lihat RTMP stream ingest.

  • Dapatkan data audio dan video

    Anda dapat mengambil data audio dan video dengan mengakses PlayURL, yang mengarah ke file indeks M3U8, melalui browser web.

    Platform seluler seperti Android dan iOS, serta beberapa browser desktop seperti Microsoft Edge dan Safari, dapat memutar video secara langsung dengan mengakses file M3U8. Browser lain, seperti Chrome, memerlukan pustaka JavaScript tertanam seperti Video.js untuk memutar video tersebut.

Jika Anda mengunggah dan mengambil media dari bucket baca-tulis publik, siapa pun dapat mengakses dan mengubah data Anda. Hal ini dapat menyebabkan kebocoran data dan biaya tak terduga. Secara default, akses ke bucket OSS bersifat privat, dan semua permintaan lintas asal ditolak. Untuk melindungi data Anda, kami menyarankan menggunakan satu atau beberapa fitur keamanan berikut sesuai kasus penggunaan Anda: Berbagi sumber daya lintas asal (CORS), Perlindungan hotlink, atau URL yang ditandatangani untuk bucket privat.

Berbagi sumber daya lintas asal (CORS)

Jika Anda menyematkan video OSS pada halaman web pihak ketiga alih-alih mengaksesnya langsung dari browser, Anda mungkin mengalami masalah lintas asal yang mencegah pemutaran. Hal ini terjadi karena browser web menerapkan kebijakan asal sama. Jika server web dan bucket OSS Anda tidak berada dalam domain yang sama, browser akan memblokir permintaan tersebut secara default.

Sebagai contoh, pertimbangkan server web di http://192.168.xx.xx:8080. Pengguna mengunjungi halaman dari server ini yang berisi video tertanam dari bucket OSS. Browser kemudian harus mengirim permintaan terpisah ke OSS untuk mengambil data video. Browser mendeteksi bahwa origin halaman web (http://192.168.xx.xx:8080) berbeda dari origin bucket OSS. Browser lalu mengirim permintaan pre-flight ke bucket untuk meminta izin. Secara default, OSS tidak memiliki konfigurasi CORS dan menolak permintaan tersebut, sehingga video tidak dapat diputar. Gambar berikut mengilustrasikan proses ini:video

Anda dapat mengatasi masalah pemutaran ini dengan mengonfigurasi Berbagi sumber daya lintas asal untuk bucket OSS Anda.

  1. Masuk ke OSS console.

  2. Klik Buckets, lalu klik nama bucket yang dituju.

  3. Di panel navigasi sebelah kiri, klik Content Security > CORS.

  4. Klik Create Rule.

  5. Pada panel Create Rule, konfigurasikan parameter-parameter berikut.

    Untuk contoh ini, atur Origin menjadi http://192.168.xx.xx:8080. Untuk informasi tentang parameter lainnya, lihat Configure CORS.

    • Jika origin berupa nama domain tertentu, masukkan nama domain lengkap, misalnya www.example.com. Jangan menghilangkan subdomain, misalnya example.com.

    • Jika origin berupa alamat IP tertentu, masukkan URL lengkap termasuk protokol dan nomor port, misalnya http://xx.xx.xx.xx:80. Jangan hanya memasukkan alamat IP saja, misalnya xx.xx.xx.xx.

    Browser biasanya menyimpan cache konfigurasi CORS selama beberapa detik hingga beberapa menit. Jika Anda ingin konfigurasi baru langsung berlaku, bersihkan cache browser Anda dan refresh halaman.

Perlindungan hotlink

Meskipun aturan CORS secara efektif mencegah situs web lain menyematkan sumber daya media Anda, aturan tersebut tidak berlaku jika pengguna mengakses konten di bucket OSS Anda secara langsung. Dalam skenario ini, Anda dapat menggunakan fitur Perlindungan hotlink di OSS. Fitur ini memungkinkan Anda mengonfigurasi daftar putih Referer untuk bucket guna mencegah akses tidak sah.

Secara default, bucket mengizinkan permintaan dengan referer kosong. Artinya, pengguna dapat menonton video dengan mengakses langsung PlayURL-nya dari browser lokal. Untuk mencegah penggunaan media Anda tanpa izin, Anda dapat mengonfigurasi bucket agar menolak permintaan dengan referer kosong dan menambahkan domain atau alamat IP tepercaya Anda ke daftar putih Referer. Setelah konfigurasi ini diterapkan, akses pihak ketiga dari luar daftar putih akan ditolak dengan error 403 Forbidden.

  1. Masuk ke OSS console.

  2. Klik Buckets, lalu klik nama bucket yang dituju.

  3. Di panel navigasi sebelah kiri, pilih Content Security>Hotlink Protection.

  4. Pada halaman Hotlink Protection, aktifkan Hotlink Protection.

    • Referer Whitelist: Masukkan nama domain atau alamat IP, misalnya *.aliyun.com.

      Anda dapat mengatur bidang Referer yang berbeda sesuai kasus penggunaan Anda. Untuk contoh, lihat Configure hotlink protection for a bucket.

    • Allow Empty Referer: Pilih No.

      Catatan
      • Jika Anda menolak permintaan dengan referer kosong dan mengonfigurasi daftar putih Referer, hanya permintaan yang menyertakan header Referer dari daftar putih yang dapat mengakses sumber daya OSS Anda.

      • Jika Anda menolak permintaan dengan referer kosong tetapi tidak mengonfigurasi daftar putih Referer, pengaturan tersebut tidak berpengaruh, dan permintaan dengan referer kosong tetap diizinkan.

  5. Klik Save.

Mekanisme signature untuk bucket privat

Untuk melindungi data Anda, tingkat kontrol akses bucket OSS secara default bersifat privat. Oleh karena itu, saat Anda perlu membaca dari atau menulis ke bucket privat, Anda harus menyertakan signature dalam permintaan Anda untuk memverifikasi izin Anda.

Saat Anda mengingest aliran ke bucket privat, Anda harus menandatangani URL ingest sebelum dapat mengunggah file audio dan video. Untuk informasi selengkapnya, lihat RTMP ingest URLs and signatures.

Contoh berikut menggunakan Python SDK untuk mendapatkan URL ingest yang ditandatangani:

Catatan

Contoh ini mengembalikan string dalam format berikut:

rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/xxx?playlistName=xxx&OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx

Nilai Signature adalah tanda tangan tersebut, dan parameter sebelumnya berisi informasi tentang aliran video.

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
# Nama bucket, misalnya examplebucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# Buat dan konfigurasikan saluran langsung.
# File indeks berisi tiga file TS, masing-masing dengan durasi 5 detik. Durasi 5 detik merupakan nilai yang direkomendasikan dan durasi aktual bergantung pada interval keyframe.
channel_name = "your_channel_name"
playlist_name = "your_playlist_name.m3u8"
frag_count_config = 3
frag_duration_config = 5
create_result = bucket.create_live_channel(
        channel_name,
        oss2.models.LiveChannelInfo(
            status = 'enabled',
            description = 'your description here',
            target = oss2.models.LiveChannelInfoTarget(
                playlist_name = playlist_name,
                frag_count = frag_count_config,
                frag_duration = frag_duration_config)))

# Dapatkan URL ingest RTMP yang ditandatangani.
# Parameter 'expires' menentukan periode validitas URL dalam detik sejak waktu saat ini.
# Setelah Anda mendapatkan signed_url, Anda dapat menggunakan tool ingest untuk mendorong aliran. Masa berlaku URL hanya diperiksa saat koneksi awal. Setelah terhubung, aliran tidak akan terputus meskipun URL telah kedaluwarsa.
signed_rtmp_url = bucket.sign_rtmp_url(channel_name, playlist_name, expires=3600)
print(signed_rtmp_url)

Saat mengakses file di bucket privat, Anda harus menyertakan signature dalam URL. HLS bekerja dengan mengakses file indeks M3U8 secara dinamis, lalu mengirim beberapa permintaan untuk mengunduh segmen TS terbaru berdasarkan indeks tersebut. Setiap permintaan ini harus menyertakan signature dalam URL-nya.

image

Untuk menyederhanakan proses ini, OSS menyediakan mekanisme signature dinamis untuk akses media. Anda hanya perlu menambahkan parameter x-oss-process=hls/sign ke URL saat pertama kali mengakses file M3U8. OSS kemudian secara otomatis menandatangani semua URL file TS dalam playlist yang dikembalikan menggunakan metode yang sama seperti URL M3U8.

Contoh berikut menggunakan Python SDK untuk menunjukkan cara menggunakan mekanisme signature dinamis guna mengakses data audio dan video:

# Dapatkan URL yang ditandatangani secara dinamis untuk menonton aliran.
your_object_name = "test_rtmp_live/test.m3u8"
style = "hls/sign"
# Secara default, saat OSS menghasilkan URL yang ditandatangani, karakter garis miring (/) dalam path objek lengkap akan di-escape. Hal ini dapat membuat URL tidak dapat digunakan.
# Atur slash_safe ke True untuk mencegah OSS melakukan escape terhadap garis miring. Ini memastikan URL yang ditandatangani dapat langsung digunakan.
signed_download_url = bucket.sign_url('GET', your_object_name, 3600, params={'x-oss-process': style}, slash_safe=True)
print(signed_download_url)