Object Storage Service (OSS) memungkinkan Anda menggunakan Real-Time Messaging Protocol (RTMP) untuk mengunggah aliran video dan audio ke bucket OSS serta menyimpannya dalam format HTTP Live Streaming (HLS). OSS juga menawarkan berbagai metode otentikasi dan otorisasi yang dapat digunakan untuk mencapai kontrol akses detail halus pada data audio dan video di bucket.
Prasyarat
Sebuah bucket telah dibuat. Untuk informasi lebih lanjut, lihat Buat bucket.
Operasi dasar
OSS memungkinkan Anda menggunakan RTMP untuk mengunggah aliran video yang dikodekan dengan H.264 dan aliran audio yang dikodekan dengan Advanced Audio Coding (AAC) ke bucket OSS. Data audio dan video yang diunggah dapat diperoleh melalui PlayURL dari LiveChannel.
Unggah data audio dan video
Panggil operasi PutLiveChannel untuk membuat LiveChannel.
Setelah LiveChannel dibuat, PublishURL dan PlayURL akan dikembalikan. PublishURL digunakan untuk mengunggah aliran menggunakan RTMP, sedangkan PlayURL digunakan untuk memperoleh data audio dan video.
Gunakan PublishURL untuk mengunggah aliran video dan audio.
OSS menyimpan file audio atau video yang diunggah sebagai objek indeks M3U8 dan beberapa objek video dalam format TS sesuai protokol HLS. Untuk informasi lebih lanjut, lihat Pengambilan aliran melalui RTMP.
Peroleh data audio dan video
Untuk memperoleh data audio dan video yang diunggah menggunakan LiveChannel, Anda dapat mengakses PlayURL dari LiveChannel melalui browser untuk mengakses objek indeks M3U8.
Anda dapat menggunakan perangkat seluler Android dan iOS serta beberapa browser di PC, seperti Microsoft Edge dan Safari, untuk mengakses objek indeks M3U8 dan memutar objek video. Jika Anda menggunakan browser lain seperti Google Chrome, Anda harus menyematkan skrip JavaScript seperti Video.js di browser untuk memutar objek video.
Jika Anda mengunggah data audio dan video ke bucket dengan izin baca-tulis publik, semua pengguna dapat membaca dan menulis data Anda di bucket, yang dapat menyebabkan kebocoran data dan biaya lalu lintas tambahan. Daftar kontrol akses (ACL) default sebuah bucket bersifat pribadi, dan bucket menolak semua permintaan lintas asal. Kami menyarankan Anda menggunakan satu atau lebih metode yang dijelaskan dalam bagian berikutnya untuk memastikan keamanan data sesuai skenario bisnis Anda.
CORS
Jika Anda meminta objek audio atau video yang disimpan di bucket OSS menggunakan tautan yang disematkan di situs web pihak ketiga, bukan menggunakan URL objek langsung dari bilah alamat browser, audio atau video yang diminta mungkin gagal diputar karena keterbatasan akses lintas asal. Browser mengidentifikasi permintaan sebagai permintaan lintas asal karena server web dari situs web pihak ketiga dan bucket yang menyimpan objek memiliki asal yang berbeda. Browser memberlakukan kebijakan asal sama demi alasan keamanan dan menolak permintaan lintas asal ini jika server web bukan salah satu asal yang diizinkan untuk bucket.
Sebagai contoh, situs web http://192.168.xx.xx:8080 menggunakan kode JavaScript untuk menyematkan tautan ke video yang disimpan di bucket OSS. Saat Anda mengklik tautan tersebut, browser mengirim permintaan untuk objek ke OSS. Namun, browser mengidentifikasi bahwa bucket dan situs web http://192.168.xx.xx:8080 memiliki asal yang berbeda dan mengirim permintaan preflight untuk memeriksa apakah bucket mengizinkan permintaan lintas asal. Secara default, Berbagi Sumber Daya Lintas Asal (CORS) dinonaktifkan untuk bucket OSS. Browser menolak permintaan lintas asal ke bucket. Oleh karena itu, objek video yang disematkan di situs web tidak dapat diputar. Gambar berikut menunjukkan contoh penolakan permintaan lintas asal.
Anda dapat mengonfigurasi CORS untuk bucket untuk mengizinkan akses lintas asal ke sumber daya video dan audio yang disimpan di bucket OSS.
Masuk ke Konsol OSS.
Di panel navigasi kiri, klik Buckets. Di halaman Bucket, klik nama bucket.
Di pohon navigasi kiri, pilih .
Di halaman CORS, klik Create Rule.
Di panel Create Rule, konfigurasikan parameter CORS.
Dalam contoh ini, nilai parameter Origin diatur ke http://192.168.xx.xx:8080. Untuk informasi lebih lanjut tentang pengaturan CORS, lihat Konfigurasi CORS.
Jika Anda ingin menentukan asal menggunakan nama domain, masukkan nama domain lengkap. Sebagai contoh, masukkan www.example.com dan jangan singkat nama domain menjadi example.com.
Jika Anda ingin menentukan asal menggunakan alamat IP, masukkan URL asal lengkap yang mencakup jenis protokol, alamat IP, dan nomor port. Sebagai contoh, masukkan http://xx.xx.xx.xx:80 dan jangan hanya menentukan bagian xx.xx.xx.xx.
Browser membutuhkan waktu puluhan detik hingga beberapa menit untuk menyimpan konfigurasi CORS dalam cache. Untuk memastikan konfigurasi CORS segera berlaku, Anda dapat menghapus cache browser Anda dan kemudian menyegarkan halaman.
Perlindungan hotlink
CORS dapat mencegah sumber daya audio atau video Anda disematkan di situs web pihak ketiga. Namun, konfigurasi CORS tidak dapat mencegah sumber daya audio atau video yang disimpan di bucket OSS diakses secara langsung. Dalam kasus ini, Anda dapat mengonfigurasi perlindungan hotlink dan menentukan daftar putih Referer untuk bucket Anda guna mencegah akses tidak sah ke sumber daya audio atau video Anda.
Secara default, bucket mengizinkan permintaan di mana bidang Referer kosong. Anda dapat menggunakan browser untuk mengakses PlayURL dari LiveChannel untuk melihat objek video yang disimpan di bucket. Untuk mencegah sumber daya audio atau video Anda diakses oleh pengguna tidak sah, Anda dapat mengonfigurasi perlindungan hotlink untuk bucket untuk menolak permintaan di mana bidang Referer kosong dan menambahkan nama domain tepercaya atau alamat IP ke daftar putih Referer. Dalam hal ini, permintaan dari nama domain atau alamat IP pihak ketiga yang tidak termasuk dalam daftar putih Referer akan gagal dengan kesalahan 403 Forbidden.
Masuk ke Konsol OSS.
Di panel navigasi kiri, klik Buckets. Di halaman Bucket, klik nama bucket.
Di pohon navigasi kiri, pilih Content Security > Hotlink Protection.
Di halaman Hotlink Protection, aktifkan Hotlink Protection.
Di bidang Referer Whitelist, masukkan nama domain atau alamat IP. Contoh: *.aliyun.com.
Anda dapat mengonfigurasi bidang Referer yang berbeda berdasarkan skenario bisnis Anda. Untuk contoh konfigurasi Referer, lihat Konfigurasi perlindungan hotlink untuk bucket.
Pilih Tidak untuk Allow Empty Referer untuk menolak permintaan di mana bidang Referer kosong.
CatatanJika Anda memilih Tidak untuk Izinkan Referer Kosong dan mengonfigurasi daftar putih Referer, hanya permintaan yang mencakup salah satu Referer yang ditentukan dalam daftar putih yang dapat mengakses sumber daya Anda di bucket.
Jika Anda memilih Tidak untuk Izinkan Referer Kosong dan tidak mengonfigurasi daftar putih Referer, permintaan dengan bidang Referer kosong juga diizinkan.
Klik Save.
Mekanisme tanda tangan untuk bucket pribadi
Untuk keamanan data, ACL bucket secara default bersifat pribadi. Oleh karena itu, saat Anda mengirim permintaan ke bucket pribadi untuk membaca atau menulis data, Anda harus menambahkan tanda tangan dalam permintaan untuk mendeklarasikan izin operasi Anda ke OSS.
Saat Anda ingin mengunggah aliran ke bucket pribadi, Anda harus menandatangani PublishURL untuk mengunggah objek audio atau video ke bucket. Untuk informasi lebih lanjut, lihat URL ingest RTMP dan tanda tangan.
Kode sampel berikut memberikan contoh cara menggunakan OSS SDK untuk Python untuk mendapatkan PublishURL bertanda tangan guna mengunggah aliran ke bucket:
Kode sampel berikut mengembalikan string dalam bentuk berikut:
rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/xxx?playlistName=xxx&OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx
di mana, nilai parameter Signature adalah string tanda tangan dan parameter lainnya memberikan informasi terkait aliran.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
# Tentukan nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# Buat dan konfigurasikan LiveChannel.
# Objek indeks mencakup tiga objek TS, dan setiap objek TS memiliki durasi 5 detik. Durasi 5 detik dalam contoh ini hanya untuk referensi. Durasi aktual bergantung pada 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 = 'deskripsi Anda di sini',
target = oss2.models.LiveChannelInfoTarget(
playlist_name = playlist_name,
frag_count = frag_count_config,
frag_duration = frag_duration_config)))
# Dapatkan PublishURL bertanda tangan yang digunakan untuk mengunggah aliran menggunakan RTMP.
# Nilai expires dalam contoh menunjukkan panjang waktu dalam detik dari waktu saat ini hingga kedaluwarsa URL.
# Setelah Anda mendapatkan signed_url, Anda dapat menggunakan alat ingest data untuk mengunggah aliran ke OSS. OSS hanya memeriksa nilai expires saat membangun koneksi untuk ingest aliran. Aliran yang terhubung ke OSS tidak ditangguhkan meskipun URL kedaluwarsa selama proses ingest aliran.
signed_rtmp_url = bucket.sign_rtmp_url(channel_name, playlist_name, expires=3600)
print(signed_rtmp_url)Saat Anda mengakses objek di bucket pribadi menggunakan URL objek, tanda tangan harus ditambahkan ke URL. Saat Anda mengakses aliran HLS, permintaan dikirim untuk mengakses objek indeks M3U8 secara dinamis, dan kemudian beberapa permintaan dikirim untuk mengunduh objek TS terbaru berdasarkan isi objek indeks. Tanda tangan harus ditambahkan ke URL di setiap permintaan.

Untuk memberikan lebih banyak kemudahan, OSS menyediakan mekanisme tanda tangan dinamis untuk mengakses data audio dan video. Anda perlu menambahkan parameter x-oss-process=hls/sign ke URL saat Anda mengakses file M3U8 untuk pertama kali, dan OSS secara otomatis menandatangani semua alamat file TS dalam daftar putar yang dikembalikan dengan cara yang sama seperti OSS menandatangani URL untuk objek M3U8.
Kode sampel berikut memberikan contoh cara menggunakan OSS SDK untuk Python untuk menambahkan tanda tangan secara dinamis ke permintaan saat Anda mengakses objek audio atau video:
# Dapatkan URL bertanda tangan yang digunakan untuk melihat aliran.
your_object_name = "test_rtmp_live/test.m3u8"
style = "hls/sign"
# Secara default, OSS mengidentifikasi garis miring (/) dalam jalur lengkap objek sebagai karakter escape saat URL bertanda tangan dihasilkan. Dalam hal ini, Anda tidak dapat menggunakan URL bertanda tangan secara langsung.
# Atur parameter slash_safe ke True. Dengan cara ini, OSS tidak mengidentifikasi garis miring (/) dalam jalur lengkap objek sebagai karakter escape. Dalam hal ini, Anda dapat menggunakan URL bertanda tangan yang dihasilkan untuk mengunduh objek.
signed_download_url = bucket.sign_url('GET', your_object_name, 3600, params={'x-oss-process': style}, slash_safe=True)
print(signed_download_url)