すべてのプロダクト
Search
ドキュメントセンター

:HLSカプセル化インタフェース

最終更新日:Dec 22, 2023

OSS MEDIA C SDKクライアントは、受信したH.264またはAAC形式のデータをTSまたはM3U8形式にパックし、データをOSSに書き込むことができます。 基本的なインターフェイスとは別に、SDKはカプセル化された録画とライブビデオインターフェイスも提供します。

インターフェイス

HLS関連のカプセル化インターフェイスはすべてoss_media_hls_stream.hにあります。 現在、次のインターフェイスが提供されています。

  • oss_media_hls_stream_open
  • oss_media_hls_stream_write
  • oss_media_hls_stream_close

さまざまなインターフェイスの使用に関する機能と注意事項は次のとおりです。

  • 基本構造
    /**
     * OSSメディアHLSストリームオプションに関する情報
     * /
    typedef struct oss_media_hls_stream_options_s {
        int8_t is_live;
        char * bucket_name;
        char * ts_name_prefix;
        char * m3u8_name;
        int32_t video_frame_rate;
        int32_t audio_sample_rate;
        int32_t hls_time;
        int32_t hls_list_size;
    } oss_media_hls_stream_options_t;
    
    /**
     * OSSメディアHLSストリームに関する情報
     * /
    typedef struct oss_media_hls_stream_s {
        const oss_media_hls_stream_options_t * オプション;
        oss_media_hls_file_t * ts_file;
        oss_media_hls_file_t * m3u8_file;
        oss_media_hls_frame_t * video_frame;
        oss_media_hls_frame_t * audio_frame;
        oss_media_hls_m3u8_info_t * m3u8_infos;
        int32_t ts_file_index;
        int64_t current_file_begin;
        int32_t has_aud;
        aos_pool_t * プール;
    } oss_media_hls_stream_t;
                        
    説明
    • is_live: ビデオがライブモードかどうかを示します。 ビデオがライブモードの場合、M3U8オブジェクトには最後の数個のTSオブジェクトの情報のみが含まれます。
    • bucket_name: HLSファイルを格納するバケットの名前を示します。
    • ts_name_prefix: TSオブジェクト名のプレフィックスを示します。
    • m3u8_name: M3U8オブジェクトの名前を示します。
    • video_frame_rate: ビデオデータのフレームレートを示します。
    • audio_sample_rate: オーディオデータのサンプルレートを示します。
    • hls_time: 各TSオブジェクトの最大期間を指定します。
    • hls_list_size: ライブビデオモードでM3U8オブジェクトに保持されているTSオブジェクトの数を示します。
  • HLSストリームオブジェクト
    を開く /**
     * @ brief OSS HLSファイルを開く
     * @ param[in] auth_func access_key_id/access_key_secretを設定する権限付与関数
     * @ param[in] オプション設定情報
     * @ return:
     * NULLが返された場合は、成功を示します。 それ以外の場合は、失敗を示します。
     * /
    oss_media_hls_stream_t * oss_media_hls_stream_open(auth_fn_t auth_func、
                            const oss_media_hls_stream_options_t * オプション);
                        
    説明
    • 完全なコード例については、『GitHub』をご参照ください。
    • .
  • HLSストリームオブジェクト
    を閉じる /**
     * @ brief HLSストリームオブジェクトを閉じる
     * /
    int oss_media_hls_stream_close(oss_media_hls_stream_t * stream);
    
                        
    説明 完全なコード例については、『GitHub』をご参照ください。
  • HLSストリームオブジェクト
    へのデータの書き込み /**
     * @ briefビデオとオーディオデータを書く
     * @ param[in] video_bufビデオデータ
     * @ param[in] video_lenビデオデータの長さ。 0にすることができます
     * @ param[in] audio_bufオーディオデータ
     * @ param[in] audio_lenオーディオデータ長。 0にすることができます
     * @ param[in] ストリームHLSストリーム
     * @ return:
     * 0が返された場合は、操作が成功したことを示します。
     * それ以外の場合は、エラーが発生したことを示します
     * /
    int oss_media_hls_stream_write(uint8_t * video_buf、
                                   uint64_t video_len、
                                   uint8_t * audio_buf、
                                   uint64_t audio_len、
                                   oss_media_hls_stream_t * ストリーム);
                        

    プロジェクトの例:

    static void write_video_audio_vod() {
        int ret;
        int max_size = 10*1024*1024;
        FILE * h264_file, * aac_file;
        uint8_t * h264_buf、* aac_buf;
        int h264_len, aac_len;
    
        oss_media_hls_stream_options_tオプション;
        oss_media_hls_stream_t * ストリーム;
    
        /* HLSストリームパラメーター値を設定する * /
        options.is_live = 0;
        options.bucket_name = "<あなたのbuckete name>";
        options.ts_name_prefix = "vod/video_audio/test";
        options.m3u8_name = "vod/video_audio/vod.m3u8";
        options.video_frame_rate = 30;
        options.audio_sample_rate = 24000;
        options.hls_time = 5;
    
        /* HLSストリームを開く * /
        stream = oss_media_hls_stream_open(auth_func、&options);
        if (stream == NULL) {
            printf("open hls stream failed.\n");
            return;
        }
    
        /* オーディオとビデオのデータを保存する2つのバッファを作成します * /
        h264_buf = malloc(max_size);
        aac_buf = malloc(max_size);
    
        /* ビデオデータとオーディオデータを読み取り、インターフェイスを呼び出してOSSにデータを書き込む * /
        {
            h264_file = fopen("/path/to/video/1.h264" 、"r");
            h264_len = fread(h264_buf, 1, max_size, h264_file);
            fclose(h264_file);
    
            aac_file = fopen("/path/to/audio/1.aac", " r ");
            aac_len = fread(aac_buf, 1, max_size, aac_file);
            fclose(aac_file);
    
            ret = oss_media_hls_stream_write(h264_buf、h264_len、 
                    aac_buf, aac_len, stream);
            if (ret != 0) {
                printf("vodストリームの書き込みに失敗しました。\n");
                return;
            }
        }
    
        /* ビデオデータとオーディオデータを再度読み取り、インターフェイスを呼び出してOSSにデータを書き込みます * /
        {
            h264_file = fopen("/path/to/video/2.h264" 、"r");
            h264_len = fread(h264_buf, 1, max_size, h264_file);
            fclose(h264_file);
    
            aac_file = fopen("/path/to/audio/1.aac", " r ");
            aac_len = fread(aac_buf, 1, max_size, aac_file);
            fclose(aac_file);
    
            ret = oss_media_hls_stream_write(h264_buf、h264_len、 
                    aac_buf, aac_len, stream);
            if (ret != 0) {
                printf("vodストリームの書き込みに失敗しました。\n");
                return;
            }
        }   
    
        /* データ書き込み後、HLSストリームを閉じます * /
        ret = oss_media_hls_stream_close (ストリーム);
        if (ret != 0) {
            printf("close vod stream failed.\n");
            return;
        }
    
        /* リソースを解放する * /
        フリー (h264_buf);
        フリー (aac_buf);
    
        printf (「H. 264とaacをHLS vodに変換する」);
    }
                        
    説明
    • 現在、録画およびライブビデオインターフェイスは、ビデオのみ、オーディオのみ、およびオーディオビデオモードをサポートしています。
    • 完全なコード例については、『GitHub』をご参照ください。
    • 録画とライブビデオのインターフェイスはまだ比較的基本的です。 高度な機能が必要な場合は、基本インターフェイスを使用して2つのインターフェイスをシミュレートし、高度なカスタム機能を自分で実装します。
    • サンプルプロジェクトで効果を表示できます。