Canlı yayın kapsülleme, düşük gecikme süresiyle çeşitli akış protokolleri üzerinden oynatma yapılabilmesi için canlı yayınlarınızı farklı konteyner formatlarına dönüştürür.
Desteklenen konteyner formatları
ApsaraVideo Live; Real-Time Messaging Protocol (RTMP), HTTP-FLV ve HTTP Live Streaming (HLS) protokollerini destekler. Gecikme süresini azaltmak ve uyumluluğu artırmak için canlı yayın kapsülleme, teslimattan önce yayınları cloud ortamında farklı konteyner formatlarına dönüştürür.
Aşağıdaki tabloda desteklenen konteyner formatları açıklanmaktadır:
|
|
|
|
|
|
|
Ses: AAC, OPUS, AC3, EAC3, MP3 Video: H.264, H.265 |
|
|
|
Ses: AAC Video: H.264, H.265 |
Çalışma mantığı
Canlı yayın kapsülleme, yayınları TS veya CMAF formatında segmentlere böler. Sistem daha sonra bu segmentleri HLS, LL-HLS veya DASH protokolleri aracılığıyla dağıtır. Her yayın için sistem, segment URL'lerini sırayla kaydeden bir manifest dosyası oluşturur. Bir istemci canlı yayını istediğinde sunucu en güncel manifest dosyasını döndürür.
Akış deneyimini iyileştirmek için bu özelliği canlı yayın transkodlama ve zaman kaydırma ile birlikte kullanabilirsiniz.
Avantajlar
-
Düşük gecikmeli canlı yayınlama gerçekleştirin
Standart HLS'e kıyasla LL-HLS, yayınları daha küçük kısmi segmentlere (200 ms ile 1 saniye arasında) böler. Bu yaklaşım, çalma listesinin yeniden yüklenmesini engeller ve uçtan uca gecikme süresini 3 ila 5 saniyeye düşürür.
-
Birden fazla cihazla uyumluluğu artırın
ApsaraVideo Live varsayılan olarak canlı yayınları TS konteyner formatını kullanarak HLS üzerinden dağıtır. Bu format bazı cihazlar ve tarayıcılarla uyumlu değildir. İçeriği CMAF formatında paketlemek için kapsüllemeyi kullanın; bu format daha geniş bir cihaz, platform ve kodlama yelpazesini (H.265 dahil) destekler.
-
Mevcut yayınlarınız üzerinde müdahaleci değildir
Canlı yayın kapsüllemeyi etkinleştirmek müdahaleci olmayan bir işlemdir. Bu işlem yalnızca orijinal alınan yayına dayalı olarak ek bir kapsüllenmiş oynatma yayını oluşturur. Mevcut RTMP, HTTP-FLV ve HLS yayınlarınız önceki gibi çalışmaya devam eder ve kayıt yapılandırmalarınız etkilenmez. Kapsüllemeyi etkinleştirdikten sonra CMAF ve Low-Latency HLS (LL-HLS) formatlarında yeni akış URL'leri kullanılabilir hale gelir.
Sınırlamalar
GOP boyutu
Alınan yayınların GOP boyutu tutarlı olmalıdır. Transkodlanmış bir yayını kapsüllerseniz GOP boyutunun da kararlı olduğundan emin olun.
Her segmentin süresi GOP boyutunun katı olmalıdır.
LL-HLS protokolü
Zayıf ağ koşullarında takılma sorunu artabilir. Bitrate'i otomatik olarak ayarlayan çoklu bitrate transkodlama ile birlikte kapsüllemeyi kullanmanızı öneririz.
Takılmayı veya oynatma hatasını önlemek için GOP boyutunu 1 veya 2 saniye olarak ayarlayın.
Bir ana akış alan adı en fazla 100.000 izleyiciyi destekleyebilir. Bu kotayı artırmak için bir destek talebi gönderin.
Yapılandırma yayılımı
İlk kez bir kapsülleme yapılandırması eklediğinizde sistem içerik teslimat ayarlarını günceller. Bu değişikliklerin etkili olması 3 ila 5 dakika sürer.
Kapsülleme yapılandırması oluşturma
Konsolda veya API çağrısı yaparak kapsülleme yapılandırması oluşturun.
Devam eden bir yayın için yapılandırma, yayını yeniden aldıktan sonra etkili olur.
Konsol
ApsaraVideo Live konsolu oturumunu açın.
Sol gezinme bölmesinde Feature Management > Encapsulation seçeneğini belirleyin.
Bir akış alan adı seçin ve ardından Add düğmesine tıklayın.
-
Encapsulation Settings iletişim kutusunda aşağıdaki parametreleri belirtin:
Parametre
Açıklama
AppName
Tüm uygulamalara uygulamak için bir yıldız işareti (
*) girin. Belirli bir uygulamayı hedeflemek için alma URL'sindekiAppNamedeğerini girin. Değer 255 karakterden uzun olamaz.StreamName
Tüm yayınlara uygulamak için bir yıldız işareti (
*) girin. Belirli bir yayını hedeflemek için yayın adını girin. Değer 255 karakterden uzun olamaz.Protocol
Konteyner formatını ve oynatma protokolünü seçin: Geçerli değerler:
HLS - CMAF
LL-HLS - CMAF
LL-HLS - TS
DASH - CMAF
HLS & DASH - CMAF
Segment Quantity
Manifest dosyası başına segment sayısını belirtin. Geçerli değerler: 3 ila 5.
Segment Length (s)
HLS veya DASH için: 1 ila 10 arasında bir tamsayı girin. Bu değeri GOP boyutunuzun katı olacak şekilde ayarlayın (Önerilen GOP: 5 sn).
LL-HLS için: 1 veya 2 girin. Bu değeri GOP boyutunuzun katı olacak şekilde ayarlayın (Önerilen GOP: 1 sn).
Part Length (ms)
(Yalnızca LL-HLS) Kısmi segmentlerin süresini belirtin. Geçerli değerler: 200 ila 1.000. Segment uzunluğunun üçte birinden biraz daha büyük bir değer önerilir.
Transcoded Stream
Transkodlanmış yayınların kapsüllenip kapsüllenmeyeceğini belirtin. Geçerli değerler:
Source Stream Only
Transcoded Stream Included
NotAkış alan adınız Çin anakarası dışındaki (Singapur, Almanya, Japonya veya Endonezya) bir canlı merkez kullanıyorsa oynatma gecikmesi artabilir. Üretim öncesi yapılandırmanızı test edin.
OK düğmesine tıklayın.
API
Bir kapsülleme yapılandırması eklemek için AddLivePackageConfig API'sini çağırın.
<Your RegionId>, <Your DomainName>, <Your AppName> ve <Your StreamName> gibi yer tutucuları değiştirin.
Geçerli protokol değerleri için AddLivePackageConfig konusuna bakın.
Örnek kod
// This file is auto-generated, don't edit it. Thanks.
package demo;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.live20161101.models.*;
import com.aliyun.sdk.service.live20161101.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;
public class AddLivePackageConfig {
public static void main(String[] args) throws Exception {
// HttpClient Configuration
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
.maxConnections(128) // Set the connection pool size
.maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
// Configure the proxy
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// Configure Credentials authentication information, including ak, secret, token
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
.build());
// Configure the Client
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // Region ID
//.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // Service-level configuration
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// For endpoints, refer to https://api.alibabacloud.com/product/live
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// Parameter settings for API request
AddLivePackageConfigRequest addLivePackageConfigRequest = AddLivePackageConfigRequest.builder()
.regionId("<Your RegionId>")
.domainName("<Your DomainName>")
.appName("<Your AppName>")
.streamName("<Your StreamName>")
.setProtocol("<Protocol>");
// Request-level configuration rewrite, can set Http request parameters, etc.
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// Asynchronously get the return value of the API request
CompletableFuture<AddLivePackageConfigResponse> response = client.addLivePackageConfig(addLivePackageConfigRequest);
// Synchronously get the return value of the API request
AddLivePackageConfigResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// Asynchronous processing of return values
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // Handling exceptions
System.out.println(throwable.getMessage());
return null;
});*/
// Finally, close the client
client.close();
}
}
SDK kurulum talimatları için Java SDK'yı Kullanma konusuna bakın.
Yapılandırmadan sonra orijinal kalitedeki akış URL'sine erişilebilir durumda kalır.
Kapsüllenmiş bir yayını alma ve oynatma
Yayın alma
Sorunsuz oynatma için alınan yayınınızın GOP boyutunu tutarlı tutun.
Aşağıdaki önerilen ayarlarla Open Broadcaster Software (OBS) kullanın:

Kapsüllenmiş bir yayını oynatma
-
Akış URL'sini edinin. Format protokole göre değişir:
Protokol
URL formatı
HLShttp://<DomainName>/<AppName>/<StreamName>.m3u8?aliyunols=on&auth_key=<AuthKey>
DASHhttp://<DomainName>/<AppName>/<StreamName>.mpd?aliyunols=on&auth_key=<AuthKey>
LL-HLShttp://<DomainName>/<AppName>/<StreamName>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey>ÖnemliKapsüllenmiş akış URL'leri için
aliyunols=onparametresi gereklidir.Akış URL'leri oluşturmak için URL oluşturucu kullanabilirsiniz. URL formatı yapılandırmanıza bağlıdır:
Konteyner formatı
Protokol
Oluşturulan URL türleri
TS
LL-HLS
LL-HLS ve HLS
CMAF
LL-HLS
LL-HLS ve HLS
CMAF
HLS
HLS
CMAF
DASH
DASH
CMAF
HLS & DASH
HLS ve DASH -
Yayını uyumlu bir oynatıcı ile oynatın. ApsaraVideo Player kullanmanızı öneririz.
ApsaraVideo Player web demosunu kullanmak için:

a. Video Type değerini Broadcast olarak ayarlayın.
b. Akış URL'sini girin.
c. Videoyu önizlemek için Preview sekmesine tıklayın.
ÖnemliApsaraVideo Player web sürümünü kullanmak için HTTPS sertifikalarını yapılandırmanız ve etki alanı arası erişim için
Access-Control-Allow-Originüstbilgisini ayarlamanız gerekir. Ayrıntılar için HTTPS ayarları ve HTTP Üstbilgilerini Yapılandırma konularına bakın.
Gelişmiş kullanım
Transkodlanmış yayınları kapsülleme
Transkodlanmış yayınları paketlemek için kapsüllemeyi transkodlama ile birleştirebilirsiniz.
Yordam
Kaynak yayınınız için transkodlamayı yapılandırın. Daha fazla bilgi için Kullanım senaryoları konusuna bakın.
-
Bir kapsülleme yapılandırması oluştururken konsolda Transcoded Stream değerini Transcoded Stream Included olarak ayarlayın veya AddLivePackageConfig API'si aracılığıyla
IgnoreTranscodedeğerinifalseolarak ayarlayın:// Include transcoded streams in encapsulation process (default: true = exclude) addLivePackageConfigRequest.setIgnoreTranscode(false); -
Kapsüllenmiş transkodlanmış yayın için akış URL'sini oluşturun:
-
Varsayılan veya özel transkodlama şablonu:
StreamNamedeğerine_<template-id>ekleyin. Örnek:http://<DomainName>/<AppName>/<StreamName>_<template-id>-llhls.m3u8?aliyunols=on&auth_key=<AuthKey> Çoklu bitrate transkodlama şablonu:
StreamNamedeğerine_<template-group-id>ekleyin.
NotOynatıcıların zayıf ağ koşullarında otomatik olarak daha düşük bir bitrate'e geçmesine olanak tanıyan uyarlanabilir oynatmayı etkinleştirmek için kapsüllemeyi çoklu bitrate transkodlama ile birleştirin.
Çıktı URL'lerinin davranışı kullanılan transkodlama şablonunun türüne göre farklılık gösterir:
Çoklu bitrate transkodlama için:
Kapsülleme yapılandırması, transkodlanmış yayınların çıktı formatını geçersiz kılar. Örneğin,
DASH - CMAFgibi bir kapsülleme formatı belirtirseniz sistem çoklu bitrate yayınları için yalnızca DASH - CMAF URL'leri oluşturur; HLS URL'leri oluşturmaz.Varsayılan veya özel transkodlama için:
Orijinal transkodlanmış yayın URL'leri etkilenmez. Bunun yerine sistem bu transkodlanmış yayınlar için ek kapsüllenmiş URL'ler oluşturur.
-
Yayını uyumlu bir oynatıcı ile oynatın.
Kapsüllenmiş yayınlar için zaman kaydırma
Kapsüllenmiş yayınlarla birlikte zaman kaydırmayı kullanabilirsiniz. Daha fazla bilgi için zaman kaydırma konusuna bakın.
Zaman kaydırma etkinleştirildiğinde zaman kaydırmalı segmentlerin formatı kapsülleme yapılandırmanızda belirtilen segment uzunluğunu ve formatını devralır.
HLS veya LL-HLS (CMAF): Zaman kaydırmalı segmentler CMAF formatındadır.
LL-HLS (TS): Zaman kaydırmalı segmentler TS formatındadır.