OSS MEDIA C SDK 在什么情况下用oss_media_hls_stream_close-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

OSS MEDIA C SDK 在什么情况下用oss_media_hls_stream_close

2018-02-17 18:47:38 668 1
取消 提交回答
全部回答(1)
  • 2018-02-22 14:25:29
    已采纳

    详细解答可以参考官方帮助文档

    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

    下面详细介绍各个接口的功能和注意事项

    基础结构体介绍

    1. /**
    2. * OSS MEDIA HLS STREAM OPTIONS的描述信息
    3. */
    4. typedef struct oss_media_hls_stream_options_s {
    5. int8_t is_live;
    6. char *bucket_name;
    7. char *ts_name_prefix;
    8. char *m3u8_name;
    9. int32_t video_frame_rate;
    10. int32_t audio_sample_rate;
    11. int32_t hls_time;
    12. int32_t hls_list_size;
    13. } oss_media_hls_stream_options_t;
    14. /**
    15. * OSS MEDIA HLS STREAM的描述信息
    16. */
    17. typedef struct oss_media_hls_stream_s {
    18. const oss_media_hls_stream_options_t *options;
    19. oss_media_hls_file_t *ts_file;
    20. oss_media_hls_file_t *m3u8_file;
    21. oss_media_hls_frame_t *video_frame;
    22. oss_media_hls_frame_t *audio_frame;
    23. oss_media_hls_m3u8_info_t *m3u8_infos;
    24. int32_t ts_file_index;
    25. int64_t current_file_begin_pts;
    26. int32_t has_aud;
    27. aos_pool_t *pool;
    28. } 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文件

    1. /**
    2. * @brief 打开一个oss hls文件
    3. * @param[in] auth_func 授权函数,设置access_key_id/access_key_secret等
    4. * @param[in] options 配置信息
    5. * @return:
    6. * 返回非NULL时成功,否则失败
    7. */
    8. oss_media_hls_stream_t* oss_media_hls_stream_open(auth_fn_t auth_func,
    9. const oss_media_hls_stream_options_t *options);

    注:

    关闭HLS stream文件

    1. /**
    2. * @brief 关闭HLS stream文件
    3. */
    4. int oss_media_hls_stream_close(oss_media_hls_stream_t *stream);

    注:

    写HLS stream文件

    1. /**
    2. * @brief 写入视频和音频数据
    3. * @param[in] video_buf 视频数据
    4. * @param[in] video_len 视频数据的长度,可以为0
    5. * @param[in] audio_buf 音频数据
    6. * @param[in] audio_len 音频数据的长度,可以为0
    7. * @param[in] stream HLS stream
    8. * @return:
    9. * 返回0时表示成功
    10. * 否则, 表示出现了错误
    11. */
    12. int oss_media_hls_stream_write(uint8_t *video_buf,
    13. uint64_t video_len,
    14. uint8_t *audio_buf,
    15. uint64_t audio_len,
    16. oss_media_hls_stream_t *stream);

    示例程序:

    1. static void write_video_audio_vod() {
    2. int ret;
    3. int max_size = 10 * 1024 * 1024;
    4. FILE *h264_file, *aac_file;
    5. uint8_t *h264_buf, *aac_buf;
    6. int h264_len, aac_len;
    7. oss_media_hls_stream_options_t options;
    8. oss_media_hls_stream_t *stream;
    9. /* 设置HLS stream的参数值 */
    10. options.is_live = 0;
    11. options.bucket_name = "<your buckete name>";
    12. options.ts_name_prefix = "vod/video_audio/test";
    13. options.m3u8_name = "vod/video_audio/vod.m3u8";
    14. options.video_frame_rate = 30;
    15. options.audio_sample_rate = 24000;
    16. options.hls_time = 5;
    17. /* 打开HLS stream */
    18. stream = oss_media_hls_stream_open(auth_func, &options);
    19. if (stream == NULL) {
    20. printf("open hls stream failed.\n");
    21. return;
    22. }
    23. /* 创建两个buffer用来存储音频和视频数据 */
    24. h264_buf = malloc(max_size);
    25. aac_buf = malloc(max_size);
    26. /* 读取一段视频数据和音频数据,然后调用接口写入OSS */
    27. {
    28. h264_file = fopen("/path/to/video/1.h264", "r");
    29. h264_len = fread(h264_buf, 1, max_size, h264_file);
    30. fclose(h264_file);
    31. aac_file = fopen("/path/to/audio/1.aac", "r");
    32. aac_len = fread(aac_buf, 1, max_size, aac_file);
    33. fclose(aac_file);
    34. ret = oss_media_hls_stream_write(h264_buf, h264_len,
    35. aac_buf, aac_len, stream);
    36. if (ret != 0) {
    37. printf("write vod stream failed.\n");
    38. return;
    39. }
    40. }
    41. /* 再读取一段视频数据和音频数据,然后调用接口写入OSS */
    42. {
    43. h264_file = fopen("/path/to/video/2.h264", "r");
    44. h264_len = fread(h264_buf, 1, max_size, h264_file);
    45. fclose(h264_file);
    46. aac_file = fopen("/path/to/audio/1.aac", "r");
    47. aac_len = fread(aac_buf, 1, max_size, aac_file);
    48. fclose(aac_file);
    49. ret = oss_media_hls_stream_write(h264_buf, h264_len,
    50. aac_buf, aac_len, stream);
    51. if (ret != 0) {
    52. printf("write vod stream failed.\n");
    53. return;
    54. }
    55. }
    56. /* 写完数据后,关闭HLS stream */
    57. ret = oss_media_hls_stream_close(stream);
    58. if (ret != 0) {
    59. printf("close vod stream failed.\n");
    60. return;
    61. }
    62. /* 释放资源 */
    63. free(h264_buf);
    64. free(aac_buf);
    65. printf("convert H.264 and aac to HLS vod succeeded\n");
    66. }

    注:

    • 目前的录播、直播接口都支持只有视频,只有音频,同时有音视频等。
    • 示例代码参考:GitHub
    • 目前的录播、直播接口比较初级,用户如果有高级需求,可以模拟这两个接口,使用基础接口自助实现高级定制功能。
    • 可以通过示例程序观看效果
    0 0
相关问答

1

回答

“ EEE MMM dd HH:mm:ss ZZZ yyyy”日期格式为java.sql.Date

2020-05-11 16:07:37 667浏览量 回答数 1

1

回答

C#等效于C ++ map <string,double>

2020-02-09 13:56:22 285浏览量 回答数 1

1

回答

OSS MEDIA C SDK 支持纯音频的推流吗

2018-06-11 20:31:22 618浏览量 回答数 1

1

回答

OSS MEDIA C SDK写入结束符

2018-05-28 10:15:23 494浏览量 回答数 1

1

回答

OSS MEDIA C SDK oss_media_hls_open

2018-03-28 10:16:42 623浏览量 回答数 1

1

回答

OSS MEDIA C SDK oss_media_hls_begin_m3u8

2018-03-22 12:29:44 573浏览量 回答数 1

1

回答

OSS MEDIA C SDK oss_media_hls_write_m3u8

2018-01-02 04:34:04 569浏览量 回答数 1

1

回答

OSS MEDIA C SDK 写HLS文件

2017-12-30 19:10:21 556浏览量 回答数 1

1

回答

Download File from Oss in my local system as downloadable file

2017-12-22 13:31:21 1660浏览量 回答数 1

1

回答

oss c sdk上传失败

2016-02-29 21:00:16 4055浏览量 回答数 1
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载