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-阿裏雲