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つのインターフェイスをシミュレートし、高度なカスタム機能を自分で実装します。
- サンプルプロジェクトで効果を表示できます。