差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
im:server:basics:recordfiledownload [2019/06/14 09:11] jk [获取会议内user全部录制文件] |
im:server:basics:recordfiledownload [2020/06/25 02:27] allenwang 移除 |
||
---|---|---|---|
行 4: | 行 4: | ||
环信使用 REST 的方式来获取实时音视频的录制文件,包括录制的音频文件和视频文件。 | 环信使用 REST 的方式来获取实时音视频的录制文件,包括录制的音频文件和视频文件。 | ||
- | * 录制功能由服务端控制开启,支持1v1录制和多人录制以及录制合成,默认录制功能是关闭的,开启请联系环信商务。 | + | * 录制功能可以调用SDK接口控制开启,支持1v1录制和多人录制以及录制合成。 |
- | * 文件默认仅在环信的音视频服务器保存30天,到期后会进行删除。如果需要延长文件存储的时间,需要联系环信商务。 | + | * 录制文件默认仅在环信的音视频服务器保存30天,到期后会进行删除,如需长期使用,请自行下载保存。 |
- | * 文件格式统一为.webm。如果需要对音频视频进行转码生成其他格式,需要联系环信商务。 | + | * 录制系统会自动根据音视频编码选择文件格式,一般是.webm,.mkv和.mp4三种;合成录制文件固定为.mp4格式。 |
- | * 如果对服务端录制文件进行合成,生成的合成视频文件格式为.mp4。 | + | * 如果需要其他格式,用户可以自己下载转换,转换工具建议用ffmpeg。 |
* 获取录制文件后,如果需要下载,需要通过文件详情中的URL直接下载保存。 | * 获取录制文件后,如果需要下载,需要通过文件详情中的URL直接下载保存。 | ||
+ | * SDK开启录制 | ||
+ | * [[http://sdkdocs.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_call_manager.html#af7447a6669e37d5d0bbf976b098b435b|android 1v1]] | ||
+ | * [[http://sdkdocs.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_conference_manager.html#a6a9bd493a33203869d37780d7f8cdbfe|android 多人]] | ||
+ | * [[http://sdkdocs.easemob.com/apidoc/ios/chat3.0/protocol_i_e_m_call_manager-p.html#a429bded3e8040875d02e84936cd75521|iOS 1v1]] | ||
+ | * [[http://sdkdocs.easemob.com/apidoc/ios/chat3.0/protocol_i_e_m_conference_manager-p.html#a7cd6cdf1b116964fe114d700baf26dc6|iOS 多人]] | ||
+ | * [[im/web/basics/videocall#集成步骤|web 1v1]] | ||
+ | * [[im/web/basics/multiuserconference#用户a创建会议|web 多人]] | ||
+ | * 获取录制文件时所需要的confrId,可以从SDK中获取,下面以新版本SDK属性名称为例,老版本以各端SDK头文件内的属性名称为准。 | ||
+ | * 移动端: | ||
+ | * iOS: | ||
+ | * 1v1时:在监听通话建立完成的回调中 - (void)callDidConnect:(EMCallSession *)aSession,通过 aSession.serverVideoId 获取(serverVideoId为 EMCallSession 的属性,只有在通话建立完成后通过 EMCallSession 才能拿到 serverVideoId,否则在通话未建立完成时通过 EMCallSession 取到 serverVideoId 的为空) | ||
+ | * 多人时:在创建并加入会议 createAndJoinConferenceWithType 或者加入会议室 joinConferenceWithConfId 成功后,通过回调中的 EMCallConference 对象 aCall.confId 获取到 | ||
+ | * 安卓: | ||
+ | * 1v1时:在通话状态改变的监听中 void onCallStateChanged (CallState callState, CallError error),通过判断 callState 的状态为 connected 通话建立完成时,通过 EMCallSession 的 getServerRecordId () 获取到录制文件id | ||
+ | * 多人时:在创建并加入会议 createAndJoinConference 或者加入会议室 joinConference 成功后,通过 callback 中的 EMConference 对象 调用 getConferenceId () 获取到 | ||
+ | * web端:1v1时为WebIM.call.getServerRecordId();多人时可以在createConference的回调里拿到,参考 [[im/web/basics/multiuserconference#用户a创建会议|创建会议]] | ||
+ | |||
+ | 服务器端存储的是压缩后的视频。录制文件的大小(每分钟)为: | ||
+ | ==================== | ||
+ | * 240p: 0.75M ~ 3M | ||
+ | * 480p: 2.2M ~ 7.5M | ||
+ | * 720p: 6.5M ~ 18.5M | ||
+ | * 1080p: 15M ~ 37.5M | ||
+ | |||
+ | **注意:** | ||
+ | |||
+ | ''1、通话时长<5s可能会出现服务器录制失败的情况。'' | ||
+ | |||
+ | ''2、生成录制文件所花的时间和通话时长有关,通话时间越长,生成录制文件的时间也越长。一般情况下,通话时间1小时以下,在通话结束后2小时可以获取到,为了保证录制文件数据完整建议在24小时后获取。'' | ||
- | **注意:获取录制文件时所需要的confrId,可以从SDK中获取,1v1时为EMCallSession#getServerRecordId,多人时为EMConference#getConferenceId.** | ||
---- | ---- | ||
行 46: | 行 74: | ||
|confrBeginTime|录制文件所在多人会议的开始时间| | |confrBeginTime|录制文件所在多人会议的开始时间| | ||
|confrEndTime|录制文件所在多人会议的结束时间| | |confrEndTime|录制文件所在多人会议的结束时间| | ||
- | |confrType|会议类型,“CONFR”、“COMMUNICATION”均是普通会议、“COMMUNICATION_MIX”混音会议最多支持30人以下的音频混合、“LIVE”互动会议| | + | |confrType|会议类型,“CONFR”、“COMMUNICATION”均是普通会议、<del>“COMMUNICATION_MIX”混音会议最多支持30人以下的音频混合、“LIVE”互动会议</del>| |
- | |confrId|在会议中的唯一ID| | + | |confrId|会议ID,全局唯一| |
|userName|参加会议人员,以appkey_username表示(talker,直播模式下的主播)| | |userName|参加会议人员,以appkey_username表示(talker,直播模式下的主播)| | ||
|memberName|参加会议人员,以appkey_username表示(talker,直播模式下的主播)IM情况下为 JID,系统唯一的ID| | |memberName|参加会议人员,以appkey_username表示(talker,直播模式下的主播)IM情况下为 JID,系统唯一的ID| | ||
行 60: | 行 88: | ||
<code php> | <code php> | ||
- | curl -X GET -i http://a1.easemob.com/easemob-demo/testapp/audio/IM_X364829524644331520C14" -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' | + | curl -X GET -i "http://a1.easemob.com/easemob-demo/testapp/audio/IM_X364829524644331520C14" -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' |
</code> | </code> | ||
行 114: | 行 142: | ||
<code php> | <code php> | ||
- | curl -X GET -i http://a1.easemob.com/easemob-demo/testapp/audio/20190101080607/20190304050607/0/2" -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' | + | curl -X GET -i "http://a1.easemob.com/easemob-demo/testapp/audio/20190101080607/20190304050607/0/2" -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' |
</code> | </code> | ||
=== 可能返回的结果示例 === | === 可能返回的结果示例 === | ||
行 167: | 行 195: | ||
<code php> | <code php> | ||
- | curl -X GET -i http://a1.easemob.com/easemob-demo/testapp/audio/merge/20190101080607/20190304050607/0/2" -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' | + | curl -X GET -i "http://a1.easemob.com/easemob-demo/testapp/audio/merge/20190101080607/20190304050607/0/2" -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'Content-Type: application/json' |
</code> | </code> | ||
=== 可能返回的结果示例 === | === 可能返回的结果示例 === |