游客eo2eccicuafhi_个人页

游客eo2eccicuafhi
0
1
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2018-07-12

    怎么能将个人信息变更为企业

    详细解答可以参考官方帮助文档注意: 如果通过淘宝/1688/支付宝已实名认证的账号作为阿里云登录账号,需到对应的网站修改实名认证信息。 2018年5月17日之后通过阿里云完成个人实名认证的账号不支持升级成企业实名认证账号。请您谨慎选择认证方式。 将个人实名认证变更为企业实名认证的方式有两种:通过企业支付宝在线升级和通过人工方式升级。 通过企业支付宝在线升级阿里云支持个人实名认证账号通过企业支付宝认证方式升级为企业实名认证。登录阿里云控制台,进入 实名认证'>账号管理 > 实名认证,单击 企业实名认证 进行在线升级。 通过人工方式升级如果您没有企业支付宝账号,需先解除个人实名认证,再重新进行企业实名认证。 1. 解除个人实名认证说明:如果账号下存在使用中的按量付费产品,例如,按量付费的 ECS 、OSS、SLB、CDN、OCS 等,请保证账号下余额充足,以免欠费导致停机。 解除个人实名认证需要将以下资料通过 实名认证工单入口 提交工单: 《解除实名认证申请表》(仅限变更前为个人实名认证使用)。 手持二代身份证正面和手持二代身份证反面的照片。拍照时,请手持身份证,拍摄本人上半身和身份证。人像和身份证都需显示清晰。 支付凭证。请提供以下任意一张该账号下的支付凭证: 任意一张阿里云或万网有效业务的发票。任意一张汇款凭证。任意一笔支付的支付宝、电子银行等支付截图(特殊情况可能需要多张支付凭证)。 您提交工单后,阿里云工作人员会在 3 个工作日内受理并审核。审核通过后,原实名认证信息将被清除。 2. 进行企业实名认证原个人实名认证解除后,您可在 实名认证'>账号管理 > 实名认证 页面, 选择认证类型为:企业/政府(含企业、政府、事业单位、团体、组织),重新进行实名认证。 您可以通过企业支付宝和企业对公银行账号信息两种方式完成企业实名认证。 企业实名认证具体操作步骤,请参见 企业实名认证 。
    踩1 评论0
  • 回答了问题 2018-06-27

    RDS查看账号列表

    详细解答可以参考官方帮助文档 描述 该接口用于查找指定实例、指定DB的帐户列表信息或某个指定账号的信息。 请求参数 名称 类型 是否必须 描述 Action String 是 系统规定参数,取值为DescribeAccounts。 DBInstanceId String 是 实例名。 AccountName String 否 账号名。 返回参数 名称 类型 描述 详见公共参数。 Accounts List 由Account组成的数组。 DBInstanceAccount参数 名称 类型 描述 DBInstanceId String 账号所属实例名称。 AccountName String DB操作账号名称。 AccountStatus String 账号状态: Unavailable:不可用 Available:可用 AccountDescription String 账号备注信息。 DatabasePrivileges List 由DatabasePrivilege组成的数组。 AccountType String 取值为: Normal:普通账号,默认为 Normal。 Super:超级账号 DatabasePrivilege参数 名称 类型 描述 DBName String 数据库名称。 AccountPrivilege String DB操作账号名称。 请求示例 https://rds.aliyuncs.com/?Action=DescribeAccounts &DBInstanceId=rdsubauieubauie & 返回示例 XML格式 2603CA96-B17D-4903-BC04-61A2C829CD94 MySQL testdb utf8 JSON格式 { 'Accounts': { 'DBInstanceAccount': [ { 'AccountDescription': '', 'DBInstanceId': 'rdsubauieubauie', 'DatabasePrivileges': { 'DatabasePrivilege': [] }, 'AccountStatus': 'Unavailable', 'AccountName': 'testaccount' } ] }, 'RequestId': '8D9A9689-F108-43B4-9D2E-0A52FF42B008' }
    踩1 评论0
  • 回答了问题 2018-04-04

    个人认证和用企业认证有什么影响吗

    详细解答可以参考官方帮助文档账号实名认证分为个人实名认证和企业实名认证。 个人账号,请选择认证类型为 个人; 单位账号,请选择认证类型为 企业/政府(含企业、政府、事业单位、团体、组织)。 为了您的账号安全,强烈建议个人账号不要用于企业业务的购买;企业账号不要使用个人身份进行个人实名认证。 实名认证信息对账号的影响: 影响账号的归属。 完成企业实名认证的账号归属为企业。完成个人实名认证的账号归属为个人。 可能影响账号下资金提现的款项流向。账号下的可提现资金,如果是三个月内,通过支付宝、网银等方式充值的资金可以原路提现,但充值超过三个月后,只能提现至阿里云账号实名认证同名的支付宝账号或银行卡。 个人实名认证的账号,其账号内来源于信用卡的资金只能提现至与实名认证信息同名的银行信用卡,非信用卡来源的资金可提现至与实名认证信息同名的银行卡或支付宝账号。企业实名认证的账号,其账号内资金可提现至与账号实名认证信息一致的同名银行卡或支付宝账号。 影响账号密码找回。当您忘记账号登录密码时,可单击登录页面的 忘记密码 进入 找回密码 页面。找回登录密码过程中的身份验证方式:通过拍摄脸部、通过手机验证码 + 证件、通过人工服务,需验证实名认证时提供的人像信息或证件。 所以,实名认证信息对您的账号和资金安全很重要,请按实际情况进行实名认证。
    踩1 评论0
  • 回答了问题 2018-03-20

    ios sdk 上传后回调通知

    详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @'';put.objectKey = @'';put.uploadingFileURL = [NSURL fileURLWithPath:@''];// put.uploadingData = ; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@'%lld, %lld, %lld', bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @'';// put.contentMd5 = @'';// put.contentEncoding = @'';// put.contentDisposition = @'';// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@'value1', @'x-oss-meta-name1', nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@'upload object success!'); } else { NSLog(@'upload object failed, error: %@' , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为'folder/subfolder/file',即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @'';put.objectKey = @'';put.uploadingFileURL = [NSURL fileURLWithPath:@''];// put.uploadingData = ; // 直接上传NSData// 设置Content-Type,可选put.contentType = @'application/octet-stream';// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@'']; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@'%lld, %lld, %lld', bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@'upload object success!'); } else { NSLog(@'upload object failed, error: %@' , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @'';append.objectKey = @'';append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@''];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@'%lld, %lld, %lld', bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @'';// append.contentMd5 = @'';// append.contentEncoding = @'';// append.contentDisposition = @'';OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@'objectKey: %@', append.objectKey); if (!task.error) { NSLog(@'append object success!'); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@'append object failed, error: %@' , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @'';request.objectKey = @'';request.uploadingFileURL = [NSURL fileURLWithPath:@filepath>'];// 设置回调参数request.callbackParam = @{ @'callbackUrl': @'your server callback address>', @'callbackBody': @'your callback body>' };// 设置自定义变量request.callbackVar = @{ @'': @'', @'': @'' };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@'%lld, %lld, %lld', bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@'%@', task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@'Result - requestId: %@, headerFields: %@, servercallback: %@', result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = ;resumableUpload.objectKey = ;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@'%lld, %lld, %lld', bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@'error: %@', task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@'Upload file success'); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];
    踩1 评论0
  • 提交了问题 2018-01-28

    安卓端OSS工程 图片服务

  • 回答了问题 2018-01-23

    移动推送: 集成移动推送时,有什么推荐的自查流程么?

    详细解答可以参考官方帮助文档如果您遇到集成失败、无法推送、无法获取消息等使用过程中的异常问题,请按下述流程先做一次检查,能命中90%的问题场景: 1. 是否使用过官方demo,如果使用官方demo无问题,请确认下自己的实现和demo的区别; https://github.com/aliyun/alicloud-ios-demo https://github.com/aliyun/alicloud-android-demo 2. 可以使用官网控制台【推送排查】工具自查; 3. 常见问题检索: 产品常见问题:https://help.aliyun.com/knowledge_list/9198799.html?spm=5176.7713068266.6.143.sJj2me OpenAPI常见问题:https://help.aliyun.com/knowledge_list/9198598.html?spm=5176.789198799.6.144.oUkTSI Android:https://help.aliyun.com/knowledge_list/9091870.html?spm=5176.789091869.6.134.xAE5UM iOS:https://help.aliyun.com/knowledge_list/9091869.html?spm=5176.789091870.6.135.mAuqby  
    踩1 评论0
  • 回答了问题 2018-01-03

    OSS MEDIA C SDK oss_media_hls_write_m3u8

    详细解答可以参考官方帮助文档OSS MEDIA C SDK 客户端部分支持将接收到的H.264、AAC格式封装为TS、M3U8格式,然后写到OSS上,用户通过对应的m3u8地址就可以欣赏视频音频了。 接口 HLS相关基础接口都位于oss_media_hls.h中,目前提供的接口有: oss_media_hls_open oss_media_hls_write_frame oss_media_hls_begin_m3u8 oss_media_hls_write_m3u8 oss_media_hls_end_m3u8 oss_media_hls_flush oss_media_hls_close 下面详细介绍各个接口的功能和注意事项 基础结构体介绍 /** * OSS MEDIA HLS FRAME的元数据 */ typedef struct oss_media_hls_frame_s { stream_type_t stream_type; frame_type_t frame_type; uint64_t pts; uint64_t dts; uint32_t continuity_counter; uint8_t key:1; uint8_t *pos; uint8_t *end; } oss_media_hls_frame_t; /** * OSS MEDIA HLS的描述信息 */ typedef struct oss_media_hls_options_s { uint16_t video_pid; uint16_t audio_pid; uint32_t hls_delay_ms; uint8_t encrypt:1; char key[OSS_MEDIA_HLS_ENCRYPT_KEY_SIZE]; file_handler_fn_t handler_func; uint16_t pat_interval_frame_count; } oss_media_hls_options_t; /** * OSS MEDIA HLS FILE的描述信息 */ typedef struct oss_media_hls_file_s { oss_media_file_t *file; oss_media_hls_buf_t *buffer; oss_media_hls_options_t options; int64_t frame_count; } oss_media_hls_file_t; 注: stream_type,流类型, 目前支持st_h264和st_aac两种 frame_type,帧类型,目前支持ft_non_idr,ft_idr,ft_sei,ft_sps,ft_pps,ft_aud等 pts,显示时间戳 dts,解码时间戳 continuity_counter,递增计数器,从0-15,起始值不一定取0,但必须是连续的 key,是否是关键帧 pos,当前帧数据的起始位置(含) end,当前帧数据的结束位置(不含) video_pid,视频的pid audio_pid,音频的pid hls_delay_ms,显示延迟毫秒数 encrypt,是否使用AES-128加密,目前暂不支持 key,使用加密时的秘钥,目前暂不支持 handler_func,文件操作回调函数 pat_interval_frame_count,隔多少帧插入一个pat,mpt表 打开HLS文件 /** * @brief 打开一个OSS HLS文件 * @param[in] bucket_name oss上存储文件的存储空间名称 * @param[in] object_key oss上的文件名称 * @param[in] auth_func 授权函数,设置access_key_id/access_key_secret等 * @return: * 返回非NULL时成功,否则失败 */ oss_media_hls_file_t* oss_media_hls_open(char *bucket_name, char *object_key, auth_fn_t auth_func); 注: 示例代码参考:GitHub 关闭HLS文件 /** * @brief 关闭OSS HLS文件 */ int oss_media_hls_close(oss_media_hls_file_t *file); 注: 示例代码参考:GitHub 写HLS文件 /** * @brief 写H.264或者AAC的一帧数据到oss上 * @param[in] frame h.264或者aac格式的一帧数据 * @param[out] file hls file * @return: * 返回0时表示成功 * 否则, 表示出现了错误 */ int oss_media_hls_write_frame(oss_media_hls_frame_t *frame, oss_media_hls_file_t *file); 示例程序: static void write_frame(oss_media_hls_file_t *file) { oss_media_hls_frame_t frame; FILE *file_h264; uint8_t *buf_h264; int len_h264, i; int cur_pos = -1; int last_pos = -1; int video_frame_rate = 30; int max_size = 10 * 1024 * 1024; char *h264_file_name = '/path/to/example.h264'; /* 读取H.264文件 */ buf_h264 = calloc(max_size, 1); file_h264 = fopen(h264_file_name, 'r'); len_h264 = fread(buf_h264, 1, max_size, file_h264); /* 初始化frame结构体 */ frame.stream_type = st_h264; frame.pts = 0; frame.continuity_counter = 1; frame.key = 1; /* 遍历H.264的数据,抽取出每帧数据,然后写入oss */ for (i = 0; i last_pos) { frame.pts += 90000 / video_frame_rate; frame.dts = frame.pts; frame.pos = buf_h264 + last_pos; frame.end = buf_h264 + cur_pos; oss_media_hls_write_frame(&frame, file); } last_pos = cur_pos; } /* 关闭文件,释放资源 */ fclose(file_h264); free(buf_h264); } 注: 示例代码参考:GitHub 如果H.264的数据中缺少Access Unit Delimiter NALs(00 00 00 01 09 xx),需要添加这个NAL,否则无法在ipad,iphone,safari上播放 H.264的帧是通过0xX0,0x00,0x00,0x01分隔的;AAC的帧是通过0xFF,0x0X分隔的; 当前帧为关键帧时,frame.key需要设置为1 写M3U8文件 /** * @brief 写M3U8文件的头部数据 * @param[in] max_duration TS文件最长持续时间 * @param[in] sequence TS文件起始编号 * @param[out] file m3u8 file * @return: * 返回0时表示成功 * 否则, 返回-1时表示出现了错误 */ void oss_media_hls_begin_m3u8(int32_t max_duration, int32_t sequence, oss_media_hls_file_t *file); /** * @brief 写M3U8文件数据 * @param[in] size m3u8 item个数 * @param[in] m3u8 m3u8 item的详细数据 * @param[out] file m3u8 file * @return: * 返回0时表示成功 * 否则, 返回-1时表示出现了错误 */ int oss_media_hls_write_m3u8(int size, oss_media_hls_m3u8_info_t m3u8[], oss_media_hls_file_t *file); /** * @brief 写M3U8文件的结束符等数据 * @param[out] file m3u8 file */ void oss_media_hls_end_m3u8(oss_media_hls_file_t *file); 示例程序: static void write_m3u8() { char *bucket_name; char *key; oss_media_hls_file_t *file; bucket_name = ''; key = ''; /* 打开一个HLS文件用来写M3U8格式的数据,文件名必须以.m3u8结尾 */ file = oss_media_hls_open(bucket_name, key, auth_func); if (file == NULL) { printf('open m3u8 file[%s] failed.', key); return; } /* 构造3个ts格式文件的信息 */ oss_media_hls_m3u8_info_t m3u8[3]; m3u8[0].duration = 9; memcpy(m3u8[0].url, 'video-0.ts', strlen('video-0.ts')); m3u8[1].duration = 10; memcpy(m3u8[1].url, 'video-1.ts', strlen('video-1.ts')); /* 写入M3U8文件 oss_media_hls_begin_m3u8(10, 0, file); oss_media_hls_write_m3u8(2, m3u8, file); oss_media_hls_end_m3u8(file); /* 关闭HLS文件 */ oss_media_hls_close(file); printf('write m3u8 to oss file succeeded\n'); } 注: 目前使用的M3U8版本是3 如果是录播,需要在结束的时候调用oss_media_hls_end_m3u8(file)接口写入结束符,否则可能无法播放;如果是直播,则不能调用此接口 示例代码参考:GitHub 可以通过示例程序观看效果 Windows平台可以通过VLC播放器观看,iPhone,iPad,Mac等可以直接使用Safari观看。
    踩1 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息