全部产品
Search
文档中心

Object Storage Service:Unggah data menggunakan RTMP ingest

更新时间:Feb 15, 2026

Layanan Penyimpanan Objek (Object Storage Service/OSS) memungkinkan Anda menggunakan Real-Time Messaging Protocol (RTMP) untuk mendorong aliran video yang dikodekan dalam H.264 dan aliran audio yang dikodekan dalam AAC ke OSS. Data audio dan video yang diingest dapat digunakan untuk video sesuai permintaan (VOD) atau streaming langsung. Topik ini menjelaskan cara mendorong aliran audio dan video ke OSS serta cara memutar data audio dan video yang telah diingest.

Batasan

  • Hanya ingest aliran RTMP yang didukung. Penarikan aliran tidak didukung.

  • Data yang diunggah harus berisi aliran video dalam format H.264.

  • Aliran audio bersifat opsional. Jika disertakan, formatnya harus AAC; aliran audio dalam format lain akan dibuang.

  • Hanya HTTP Live Streaming (HLS) yang didukung untuk dumping.

  • Hanya satu klien yang dapat mengingest aliran ke LiveChannel dalam satu waktu.

Dorong data audio dan video ke OSS

  1. Dapatkan URL ingest.

    Gunakan kit pengembangan perangkat lunak (SDK) untuk memanggil operasi PutLiveChannel guna membuat LiveChannel dan mendapatkan URL ingest-nya.

    • Jika daftar kontrol akses (access control list/ACL) bucket adalah baca-tulis publik (public-read-write), Anda dapat langsung menggunakan URL ingest yang diperoleh untuk ingest aliran.

    • Jika ACL bucket adalah baca-publik (public-read) atau privat, Anda harus menandatangani URL tersebut. Untuk informasi selengkapnya, lihat Signature V1.

    Hanya Java SDK dan Python SDK yang mendukung pengambilan URL ingest.

    Java

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.ClientBuilderConfiguration;
    import com.aliyun.oss.common.comm.SignVersion;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // Tentukan nama bucket. Contoh: examplebucket.
            String bucketName = "examplebucket";
            // Tentukan nama LiveChannel.
            String liveChannelName = "yourLiveChannelName";
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel Region ke cn-hangzhou.
            String region = "cn-hangzhou";
    
            // Buat instans OSSClient.
            // Setelah instans OSSClient tidak digunakan lagi, panggil metode shutdown untuk melepaskan sumber daya.
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
                        liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
                CreateLiveChannelResult result = ossClient.createLiveChannel(request);
    
                // Dapatkan URL ingest.
                List<String> publishUrls = result.getPublishUrls();
                for (String item : publishUrls) {
                    // Dapatkan URL ingest yang tidak berisi informasi signature.
                    System.out.println(item);
    
                    // Dapatkan URL ingest yang berisi informasi signature.
                    LiveChannelInfo liveChannelInfo = ossClient.getLiveChannelInfo(bucketName, liveChannelName);
                    // Waktu kedaluwarsa, ditentukan sebagai stempel waktu UNIX. Contoh ini menetapkan waktu kedaluwarsa selama 1 jam.
                    long expires = System.currentTimeMillis() / 1000 + 3600;
                    // Nama spesifik yang diteruskan dalam pemanggilan operasi createLiveChannel. Jika parameter ini tidak ditentukan, nilai default "playlist.m3u8" digunakan. Anda juga dapat memanggil operasi getLiveChannelInfo untuk mendapatkan nama ini.
                    String signRtmpUrl = ossClient.generateRtmpUri(bucketName, liveChannelName, liveChannelInfo.getTarget().getPlaylistName(), expires);
                    System.out.println(signRtmpUrl);
                }
    
                // Dapatkan URL pemutaran.
                List<String> playUrls = result.getPlayUrls();
                for (String item : playUrls) {
                    System.out.println(item);
                }
            } catch (OSSException oe) {
                oe.printStackTrace();
                System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                        + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
                System.out.println("Pesan Error:" + oe.getErrorMessage());
                System.out.println("Kode Error:" + oe.getErrorCode());
                System.out.println("ID Permintaan:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Terjadi ClientException, yang berarti client mengalami "
                        + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                        + "misalnya tidak dapat mengakses jaringan.");
                System.out.println("Pesan Error:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

    URL ingest berikut dikembalikan:

    rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel
    rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel?Expires=1688542428&OSSAccessKeyId=LTAI********&Signature=VfUgZt5N%2B6Uk4C9QH%2BzrRBTO2I****&playlistName=playlist.m3u8
    http://examplebucket.oss-cn-hangzhou.aliyuncs.com/test-channel/playlist.m3u8

    Python

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel 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')
    # Tentukan nama LiveChannel. Contoh: test-channel.
    channel_name = "test-channel"
    channel_cfg = oss2.models.LiveChannelInfo(target = oss2.models.LiveChannelInfoTarget())
    channel = bucket.create_live_channel(channel_name, channel_cfg)
    publish_url = channel.publish_url
    # Hasilkan URL yang ditandatangani untuk ingest RTMP dan atur waktu hidup (TTL) menjadi 3.600 detik.
    signed_publish_url = bucket.sign_rtmp_url(channel_name, "playlist.m3u8", 3600)
    # Cetak URL ingest tanpa tanda tangan.
    print('publish_url='+publish_url)
    # Cetak URL ingest yang ditandatangani.
    print('signed_publish_url='+signed_publish_url)

    URL ingest berikut dikembalikan:

    publish_url=rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel
    signed_publish_url=rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI********&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv****
  2. Gunakan URL ingest untuk mendorong data audio dan video ke OSS.

    File yang dihasilkan dari ingest aliran mengikuti konvensi penamaan <channel-name><timestamp>.ts, di mana <channel-name> adalah nama saluran dan <timestamp> adalah stempel waktu dalam milidetik saat segmen dihasilkan.

    Gunakan FFmpeg untuk ingest aliran

    Contoh berikut menunjukkan cara menggunakan FFmpeg untuk mendorong file video lokal ke OSS:

    ffmpeg -i 1.flv -c copy -f flv "rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live/test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI********&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ckt0Iv***"

    Gunakan OBS untuk pengambilan aliran

    1. Instal OBS Studio.

    2. Pada bilah navigasi atas, pilih File > Settings.

    3. Pada panel navigasi kiri, klik Stream.

    4. Pada kotak dialog yang muncul, konfigurasikan parameter seperti yang dijelaskan dalam tabel berikut.

      Parameter

      Deskripsi

      Service

      Dari daftar drop-down, pilih Custom.

      Server

      Masukkan URL ingest yang diperoleh pada Langkah 1 yang tidak berisi informasi signature: rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live.

      Stream Key

      Masukkan informasi signature untuk URL ingest yang diperoleh pada Langkah 1: test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI**************&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ck********.

    5. Klik OK.

Mainkan data audio dan video yang didorong ke OSS

Skenario streaming langsung

Selama ingest aliran, Anda dapat menggunakan protokol HLS untuk memutar konten yang sedang diingest. Metode pemutaran bervariasi tergantung platform:

  • Pada platform seluler seperti Android dan iOS, Anda dapat memasukkan URL pemutaran LiveChannel di browser.

  • Pada macOS, Anda dapat menggunakan browser Safari untuk pemutaran.

  • Pada PC, Anda dapat menggunakan pemutar media VLC untuk pemutaran. Setelah menginstal pemutar tersebut, pilih Media > Open Network Stream.... Kemudian, masukkan URL pemutaran ke dalam kotak teks Please enter a network URL.

Untuk streaming langsung yang lancar, atur FragDuration yang pendek, misalnya 2 detik. Kami juga merekomendasikan agar ukuran group of pictures (GOP) disetarakan dengan FragDuration LiveChannel. Gambar berikut menunjukkan cara mengatur GOP (atau keyframe Interval) di OBS:

Skenario VOD

Selama ingest aliran, OSS mendorong atau memperbarui file M3U8 sebagai aliran langsung. Setelah ingest aliran selesai, Anda harus memanggil operasi PostVodPlaylist untuk menghasilkan file M3U8 untuk VOD. Anda kemudian dapat menggunakan URL file tersebut untuk pemutaran.

Untuk skenario VOD, Anda dapat mengatur GOP yang lebih besar guna mengurangi jumlah file .ts dan menurunkan bitrate.

Referensi