日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

OSS支持使用RTMP協(xié)議推送H264編碼的視頻流和AAC編碼的音頻流到OSS。推送到OSS的音視頻數(shù)據(jù)可用于點播或直播場景。本文介紹如何推送音視頻流到OSS,以及如何播放推送到OSS的音視頻數(shù)據(jù)。

使用限制

  • 只能使用RTMP推流的方式,不支持拉流。

  • 上傳的音視頻數(shù)據(jù)中必須包含視頻流,且視頻流格式為H264。

  • 上傳的音視頻數(shù)據(jù)中可選擇是否包含音頻流。若包含音頻流,則只支持AAC格式的音頻流,其他格式的音頻流會被丟棄。

  • 轉(zhuǎn)儲只支持HLS協(xié)議。

  • 一個LiveChannel同時只能有一個客戶端向其推流。

  • 無地域?qū)傩訠ucket不支持使用RTMP推流上傳。

向OSS推送音視頻數(shù)據(jù)

  1. 獲取推流地址。

    使用SDK調(diào)用PutLiveChannel接口創(chuàng)建一個LiveChannel,并獲取對應的推流地址。

    • 如果Bucket的權(quán)限控制(ACL)為公共讀寫(public-read-write),可直接使用獲取的推流地址進行推流。

    • 如果Bucket ACL為公共讀(public-read)或者私有(private),則需要進行簽名操作。關(guān)于簽名的具體步驟,請參見簽名版本1

    僅Java SDK、Python SDK支持獲取推流地址。

    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.*;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // 填寫B(tài)ucket名稱,例如examplebucket。
            String bucketName = "examplebucket";
            // 填寫LiveChannel名稱。
            String liveChannelName = "yourLiveChannelName";
    
            // 創(chuàng)建OSSClient實例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
                        liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
                CreateLiveChannelResult result = ossClient.createLiveChannel(request);
    
                // 獲取推流地址。
                List<String> publishUrls = result.getPublishUrls();
                for (String item : publishUrls) {
                    // 獲取不包含簽名信息的推流地址。
                    System.out.println(item);
    
                    // 獲取包含簽名信息的推流地址。
                    LiveChannelInfo liveChannelInfo = ossClient.getLiveChannelInfo(bucketName, liveChannelName);
                    // expires表示過期時間,單位為Unix時間戳。本示例以設(shè)置過期時間為1小時為例。
                    long expires = System.currentTimeMillis() / 1000 + 3600;
                    // playlistName表示調(diào)用createLiveChannel接口時傳入的具體名稱。如果未傳入該參數(shù),則默認值為"playlist.m3u8"。您也可以通過調(diào)用getLiveChannelInfo接口獲取該名稱。
                    String signRtmpUrl = ossClient.generateRtmpUri(bucketName, liveChannelName, liveChannelInfo.getTarget().getPlaylistName(), expires);
                    System.out.println(signRtmpUrl);
                }
    
                // 獲取播放地址。
                List<String> playUrls = result.getPlayUrls();
                for (String item : playUrls) {
                    System.out.println(item);
                }
            } catch (OSSException oe) {
                oe.printStackTrace();
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

    返回的推流地址如下:

    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
    
    # 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # 填寫B(tài)ucket所在地域?qū)腅ndpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
    # 填寫存儲空間名稱,例如examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    # 填寫LiveChannel名稱,例如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
    # 生成RTMP推流的簽名URL,并設(shè)置過期時間為3600秒。
    signed_publish_url = bucket.sign_rtmp_url(channel_name, "playlist.m3u8", 3600)
    # 打印未簽名推流地址。
    print('publish_url='+publish_url)
    # 打印簽名推流地址。
    print('signed_publish_url='+signed_publish_url)

    返回的推流地址如下:

    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. 使用推流地址向OSS推送音視頻數(shù)據(jù)。

    使用ffmpeg進行推流

    使用ffmpeg推送本地的視頻文件到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***"

    使用OBS進行推流

    1. 安裝OBS應用程序

    2. 在頂部導航欄,選擇文件 > 設(shè)置

    3. 在左側(cè)導航欄,單擊推流

    4. 在彈出的對話框,按以下說明配置各項參數(shù)。

      參數(shù)

      說明

      服務

      下拉選擇自定義

      服務器

      填寫步驟1獲取的不包含簽名推流信息的地址:rtmp://examplebucket.oss-cn-hangzhou.aliyuncs.com/live

      串流密鑰

      填寫步驟1獲取的簽名推流信息:test-channel?playlistName=playlist.m3u8&OSSAccessKeyId=LTAI**************&Expires=1688543369&Signature=eqK8z0ZTSwznP7fkELy0ck********

    5. 單擊確定

播放推送到OSS的音視頻數(shù)據(jù)

直播場景

在推流的過程中,可以通過HLS協(xié)議播放正在推送的內(nèi)容。各平臺的播放方法如下:

  • 在Android、iOS等移動平臺,直接在瀏覽器輸入LiveChannel對應的播放地址即可。

  • Mac OS可以使用safari瀏覽器進行播放。

  • PC端可以安裝VLC多媒體播放器進行播放。安裝完成后,在VLC media player頁面,選擇媒體(M) > 打開網(wǎng)絡(luò)串流(N),然后將獲取的播放地址play_url填寫至請輸入網(wǎng)絡(luò)URL文本框。

為了直播流暢,可以設(shè)置較小的FragDuration,例如2s。另外,GOP的大小建議與LiveChannel的FragDuration配置保持一致。OBS的GOP (即keyframe Interval)設(shè)置方法如下:

點播場景

推流過程中,OSS總是以直播流的方式推送或更新M3U8。您需要在推流結(jié)束后,調(diào)用PostVodPlaylist接口組裝一個點播用的m3u8文件,然后使用該文件地址來播放。

對于點播的場景,可以設(shè)置較大的GOP來減少ts文件數(shù),從而降低碼率。

相關(guān)文檔