449
美食
HLS封裝接口__Media-C-SDK_SDK 參考_對象存儲 OSS-阿裏雲
OSS MEDIA C SDK 客戶端部分支持將接收到的H.264、AAC封裝為TS、M3U8格式後寫入OSS,除了基礎接口外,還提供封裝好的錄播、直播接口。
接口
HLS相關封裝接口都位於oss_media_hls_stream.h中,目前提供的接口有:
- oss_media_hls_stream_open
- oss_media_hls_stream_write
- oss_media_hls_stream_close
下麵詳細介紹各個接口的功能和注意事項
基礎結構體介紹
/**
* OSS MEDIA HLS STREAM OPTIONS的描述信息
*/
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 MEDIA HLS STREAM的描述信息
*/
typedef struct oss_media_hls_stream_s {
const oss_media_hls_stream_options_t *options;
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_pts;
int32_t has_aud;
aos_pool_t *pool;
} 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 stream文件
/**
* @brief 打開一個oss hls文件
* @param[in] auth_func 授權函數,設置access_key_id/access_key_secret等
* @param[in] options 配置信息
* @return:
* 返回非NULL時成功,否則失敗
*/
oss_media_hls_stream_t* oss_media_hls_stream_open(auth_fn_t auth_func,
const oss_media_hls_stream_options_t *options);
注:
- 示例代碼參考:GitHub
關閉HLS stream文件
/**
* @brief 關閉HLS stream文件
*/
int oss_media_hls_stream_close(oss_media_hls_stream_t *stream);
注:
- 示例代碼參考:GitHub
寫HLS stream文件
/**
* @brief 寫入視頻和音頻數據
* @param[in] video_buf 視頻數據
* @param[in] video_len 視頻數據的長度,可以為0
* @param[in] audio_buf 音頻數據
* @param[in] audio_len 音頻數據的長度,可以為0
* @param[in] stream HLS stream
* @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 *stream);
示例程序:
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 options;
oss_media_hls_stream_t *stream;
/* 設置HLS stream的參數值 */
options.is_live = 0;
options.bucket_name = "<your 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 */
stream = oss_media_hls_stream_open(auth_func, &options);
if (stream == NULL) {
printf("open hls stream failed.n");
return;
}
/* 創建兩個buffer用來存儲音頻和視頻數據 */
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("write vod stream failed.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("write vod stream failed.n");
return;
}
}
/* 寫完數據後,關閉HLS stream */
ret = oss_media_hls_stream_close(stream);
if (ret != 0) {
printf("close vod stream failed.n");
return;
}
/* 釋放資源 */
free(h264_buf);
free(aac_buf);
printf("convert H.264 and aac to HLS vod succeededn");
}
注:
- 目前的錄播、直播接口都支持隻有視頻,隻有音頻,同時有音視頻等。
- 示例代碼參考:GitHub
- 目前的錄播、直播接口比較初級,用戶如果有高級需求,可以模擬這兩個接口,使用基礎接口自助實現高級定製功能。
- 可以通過示例程序觀看效果
最後更新:2016-11-23 16:04:11
上一篇:
HLS基礎接口__Media-C-SDK_SDK 參考_對象存儲 OSS-阿裏雲
下一篇:
OSS SDK開發包__曆史版本SDK下載_SDK 參考_對象存儲 OSS-阿裏雲
平台優勢__平台介紹_數加平台介紹-阿裏雲
查詢截圖作業__截圖接口_API使用手冊_媒體轉碼-阿裏雲
服務市場條件__服務商入駐_服務商_雲市場-阿裏雲
安全運維__用戶指南_服務器安全(安騎士)-阿裏雲
企業郵箱在手機移動端郵件軟件設置方法__郵箱設置_郵箱常見問題_企業郵箱-阿裏雲
阿裏雲攜手德施曼等ICA聯盟企業聯合發布《中國智能鎖應用與發展白皮書》!
Dubbo 注解兼容情況__EDAS 中的 Dubbo 開發_開發者指南_企業級分布式應用服務 EDAS-阿裏雲
阿裏雲上的大公司:選擇與謀變
主題+QueueEndpoint使用手冊__Python SDK_SDK使用手冊_消息服務-阿裏雲
廢棄堆棧__堆棧相關接口_API 文檔_資源編排-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲