文档中心
Old_Live_Room 互动视频
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 互动视频
  • 视频进阶
  • H.265

H.265

更新时间:2021-09-30 15:30

1 功能简介

1.1 功能描述

H.265 是一种高效的视频编码标准,旨在有限带宽下传输更高质量的网络视频。开发者可以在编码或混流时输出 H.265 格式的视频码流。

  • ZEGO LiveRoom SDK 从 6.3.0 版本(2021-09-09 发布)开始支持该功能。
  • 如果您需要支持 H.265 视频编码,则需要将线上的 ZEGOLiveRoom SDK 都升级到 6.3.0 或以上版本,否则线上版本解码 H.265 可能会出现异常。

H.265 和 H.264 的区别如下:

差异项 H.264 H.265
同等画质下的码率
-
H.265 相比于 H.264 可以节约 30% 码率(实测值)。
软编性能
-
H.265 消耗的算力是 H.264 的 3 倍左右。
软解性能
-
H.265 消耗的算力是 H.264 的 1.5 倍左右。
硬件生态
所有机型基本都支持硬编和硬解。
大部分机型都支持硬编,绝大部分机型都支持硬解。
混流输出
支持。
支持,但价格比 H.264 混流输出更贵,详情可咨询销售。
适用场景
所有场景。
推荐在直播和音视频互动场景使用。

1.2 应用场景

  • 秀场直播、电商直播、互动直播、游戏直播中: 通过 H.265 编码,将码率降低 50%,分发给万千观众,极大降低 CDN 分发成本。
  • 在视频通话、视频会议、在线教育中: 通过 H.265 编码,在同等码率下,提高画面清晰度,让这些场景通话效果更好。

目前 Web 和小程序平台,不支持连麦和 H.265 拉流。

1.3 概念解释

  • 视频编码:通过特定的压缩技术,将原始视频格式的文件转换成另一种视频格式的方式,便于传输和存储。
  • 混流:是一种把多路音视频流从云端混合成一路流的技术,支持手动混流、自动混流和全自动混流三种方式,详情请参考 混流。
  • 转推 CDN:将音视频流从 ZEGO 音视频云推送到 CDN 的过程。
  • 连麦:是房间内用户之间互动的一种形式,通过 startPublishing 接口推自己流的同时,也调用 startPlayingStream 接口拉对方的流,两个用户连麦成功之后即可进行互动通话。

2 服务开通

  1. 使用混流输出 H.265 码流时,需要联系 ZEGO 技术支持开通服务。
  2. 使用混流输出 H.265 码流时,计费有变化,请联系销售了解具体的费用情况。
  3. 需要 LiveRoom SDK 支持 H.265 编解码能力时,请联系 ZEGO 技术支持特殊编包。

3 前提条件

在使用 H.265 编解码功能之前,请确保:

  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目管理。
  • 已在项目中集成 ZEGO LiveRoom SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 等。

4 使用步骤

4.1 检测 H.265 编解码能力

4.1.1 检测 H.265 编码能力

一些老的或低端的移动机型,不支持 H.265 视频编码。此时开发者需要在推流前先通过 isVideoEncoderSupported 接口判断本机是否支持 H.265 视频编码能力。如果支持,才能在推流前通过 setVideoCodecId 接口设置 H.265 视频编码类型,否则不生效。

4.1.2 检测 H.265 解码能力

一些老的或低端的移动机型,不支持 H.265 视频解码。在支持拉不同视频码流的场景下,如 CDN 场景,开发者需要在拉流前先通过 isVideoDecoderSupported 接口判断本机是否支持 H.265 视频解码能力。如果支持,才能拉 H.265 视频码流。否则只能拉其他格式的视频码流,例如 H.264。

4.2 连麦混流直播

连麦混流直播包括如下两种实现方式,开发者可以根据实际情况按需接入:

  • 混出不同格式的码流(推荐):混流服务直接输出一路 H.265 混流和一路 H.264 混流,该场景只需要在混流服务进行一次转码,无需 CDN 再转码。相比于混流推 CDN 转码,具有更高的清晰度,费用也更便宜,推荐使用。

  • 混流推 CDN 转码:混流服务直接输出一路 H.265 混流,需要通过 CDN 的转码能力,转出一路 H.265 和一路 H.264 码流。

    需要联系 ZEGO 技术支持开通 CDN 转码功能。

需要联系 ZEGO 技术支持开通 CDN 转码功能。

4.2.1 混出不同格式的码流(推荐)

该场景下,混流服务通过 ZEGO 实时音视频云接收到主播和连麦嘉宾的推流后,直接输出一路 H.265 混流和一路 H.264 混流,并把两路流都推流到 CDN,观众可以根据自身终端设备是否支持 H.265 视频解码,选择从 CDN 拉 H.265 码流或 H.264 码流。

混出不同格式的码流

主播端

  1. 通过构造函数 ZegoMixStreamConfig 新建一个混流任务对象,然后调用实例方法分别设置输入、输出等参数。
  2. 通过混流任务对象 ZegoMixStreamConfig 中的 pInputStreamList 属性设置混流任务输入流列表(混流输入中流的编码格式支持 H.264 和 H.265 ),默认最多支持输入 9 路流,请自行处理流布局。
  3. 通过混流任务对象 ZegoMixStreamConfig 中的 pOutputList 属性设置混流任务输出流列表。假设当前场景下,混流服务直接转码出一路 H.264 混流和一路 H.265混流,即混流输出视频编码格式为 H.264 和 H.265。
  4. 调用 mixStreamEx 接口发起混流任务。
  5. 开发者通知 App 的业务服务端流已新增。
// 用户需要监听混流回调
ZEGO::MIXSTREAM::SetMixStreamExCallback(this);     // 设置混流回调
ZEGO::MIXSTREAM::SetSoundLevelInMixedStreamCallback(this); // 设置混流音浪回调

// 调用 mixStreamEx 发起混流
std::string taskID = ""; // 请输入 taskID
ZEGO::MIXSTREAM::ZegoMixStreamConfig config;

// 请自行设置 videoConfig
config.nOutputFps = 15;
config.nOutputWidth = 1280;
config.nOutputHeight = 720; // 示例设置 720p, 15fps

// 注意,混流输入中流的编码格式支持 H.264 和 H.265, 请自行处理流布局及输入
std::vector<ZEGO::MIXSTREAM::ZegoMixStreamInput> inputList;
config.pInputStreamList = inputList.data();
config.nInputStreamCount = inputList.size();

// 混流两路输出
// 注意: 输出 target 可以是 streamID 或 CDN 地址,二者在观众端处理方式不同,该场景推荐直接传入 stremaID
std::string h264StreamID = ""; // 请输入 h264StreamID
std::string h265StreamID = ""; // 请输入 h265StreamID
int h264Bitrate = 2244; // 请输入 h264 码率,此码率为当前分辨率帧率(720p, 15fps)的推荐码率。
int h265Bitrate = 1795; // 请输入 h265 码率,此码率为当前分辨率帧率(720p, 15fps)的推荐码率。

ZEGO::MIXSTREAM::ZegoMixStreamOutput outputH264;
outputH264.isUrl = false;
memcpy(outputH264.target, h264StreamID.c_str(), h264StreamID.size());
outputH264.target[h264StreamID.size()] = '\0';
outputH264.videoBitrate = h264Bitrate * 1000;
outputH264.videoCodec = ZEGO::AV::VIDEO_CODEC_DEFAULT;

ZEGO::MIXSTREAM::ZegoMixStreamOutput outputH265;
outputH265.isUrl = false;
memcpy(outputH265.target, h265StreamID.c_str(), h265StreamID.size());
outputH265.target[h265StreamID.size()] = '\0';
outputH265.videoBitrate = h265Bitrate * 1000;
outputH265.videoCodec = ZEGO::AV::VIDEO_CODEC_H265;

std::vector<ZEGO::MIXSTREAM::ZegoMixStreamOutput> outputList;
outputList.push_back(outputH264);
outputList.push_back(outputH265);
config.pOutputList = outputList.data();
config.nOutputStreamCount = outputList.size();


int mixStreamTaskSeq_ = ZEGO::MIXSTREAM::MixStreamEx(taskID.c_str(), config);

// 开发者通知 App 的业务服务端流已新增

观众端

  1. 观众端从 App 的业务服务端收到流新增通知。
  2. 调用 isVideoDecoderSupported 接口查询观众端自身设备是否支持 H.265 解码格式。
    • 若支持,则调用 startPlayingStream 接口从 CDN 拉 H.265 码流。用户需要监听 onVideoDecoderError 回调,当编码器格式为 H.265 且错误码为 -3 时,表示软解性能不足,可能会出现低帧率现象。此时用户可以自行决定是否停止拉 H.265 码流,并重新拉 H.264 码流。
    • 若不支持,则调用 startPlayingStream 接口从 CDN 拉 H.264 码流。
// 从 App 的业务服务端收到流新增通知
std::string h264StreamID = ""; // h264StreamID
std::string h265StreamID = ""; // h265StreamID
HWND playViewHwnd = NULL; // 拉流需要渲染的 view

bool h265DecoderSupport = ZEGO::LIVEROOM::IsVideoDecoderSupported(ZEGO::AV::VIDEO_CODEC_H265);

if (h265DecoderSupport) {
    // 支持 H.265 解码
    ZEGO::LIVEROOM::StartPlayingStream(h265StreamID.c_str(), playViewHwnd);

    // 用户需要监听 onVideoDecoderError 回调,当编码器格式为 H.265 且错误码为 -3 时,表示软解性能不足,可能会出现低帧率现象。此时用户可以自行决定是否停止拉 H.265 码流,并重新拉 H.264 码流
}
else {
    // 不支持 H.265 解码
    ZEGO::LIVEROOM::StartPlayingStream(h264StreamID.c_str(), playViewHwnd);
}

4.2.2 混流后推 CDN 再转码

该场景下,混流服务通过 ZEGO 实时音视频云接收到主播和连麦嘉宾的推流后,直接输出一路 H.265 混流,并把这路混流推流到 CDN,通过 CDN 的转码能力,观众可以根据自身终端设备是否支持 H.265 视频解码,选择从 CDN 拉 H.265 码流或 H.264 码流。

混流推CDN 转码

主播端

  1. 通过构造函数 ZegoMixStreamConfig 新建一个混流任务对象,然后调用实例方法分别设置输入、输出等参数。
  2. 通过混流任务对象 ZegoMixStreamConfig 中的 pInputStreamList 属性设置混流任务输入流列表(混流输入中流的编码格式支持 H.264 和 H.265 ),默认最多支持输入 9 路流,请自行处理流布局。
  3. 通过混流任务对象 ZegoMixStreamConfig 中的 pOutputList 属性设置混流任务输出流列表。假设当前场景下,混流服务直接输出一路 H.265 混流,即混流输出视频编码格式为H.265。
  4. 调用 mixStreamEx 接口发起混流任务。
  5. 开发者通知 App 的业务服务端流已新增。
// 用户需要监听混流回调
ZEGO::MIXSTREAM::SetMixStreamExCallback(this);     // 设置混流回调
ZEGO::MIXSTREAM::SetSoundLevelInMixedStreamCallback(this); // 设置混流音浪回调

// 调用 MixStreamEx 发起混流
std::string taskID = ""; // 请输入 taskID
ZEGO::MIXSTREAM::ZegoMixStreamConfig config;

// 请自行设置 videoConfig
config.nOutputFps = 15;
config.nOutputWidth = 1280;
config.nOutputHeight = 720; // 示例设置 720p, 15fps

// 注意,混流输入中流的编码格式支持 H.264 和 H.265, 请自行处理流布局及输入
std::vector<ZEGO::MIXSTREAM::ZegoMixStreamInput> inputList;
config.pInputStreamList = inputList.data();
config.nInputStreamCount = inputList.size();

std::string publishCdnUrl = ""; // 请输入 CDN URL
int h265Bitrate = 1795; // 请输入 h265 码率,此码率为当前分辨率帧率(720p, 15fps)的推荐码率。

// 注意,由于这里需要使用 CDN 转码, target 需要传入 CDN URL
ZEGO::MIXSTREAM::ZegoMixStreamOutput outputH265;
outputH265.isUrl = true;
memcpy(outputH265.target, publishCdnUrl.c_str(), publishCdnUrl.size());
outputH265.target[publishCdnUrl.size()] = '\0';
outputH265.videoBitrate = h265Bitrate * 1000;
outputH265.videoCodec = ZEGO::AV::VIDEO_CODEC_H265;

std::vector<ZEGO::MIXSTREAM::ZegoMixStreamOutput> outputList;
outputList.push_back(outputH265);
config.pOutputList = outputList.data();
config.nOutputStreamCount = outputList.size();

int mixStreamTaskSeq_ = ZEGO::MIXSTREAM::MixStreamEx(taskID.c_str(), config);

// 开发者通知 App 的业务服务端流已新增

观众端

  1. 观众端从 App 的业务服务端收到流新增通知。
  2. 调用 isVideoDecoderSupported 接口查询观众端自身设备是否支持 H.265 解码格式。
    • 若支持,则调用 startPlayingStream 接口从 CDN 拉 H.265 码流。用户需要监听 onVideoDecoderError 回调,当编码器格式为 H.265 且错误码为 -3 时,表示软解性能不足,可能会出现低帧率现象。此时用户可以自行决定是否停止拉 H.265 码流,并重新拉 H.264 码流。
    • 若不支持,则调用 startPlayingStream 接口从 CDN 拉 H.264 码流。
// 从 App 的业务服务端收到流新增通知
std::string playStreamID = "";
HWND playViewHwnd = NULL; // 拉流需要渲染的 view

bool h265DecoderSupport = ZEGO::LIVEROOM::IsVideoDecoderSupported(ZEGO::AV::VIDEO_CODEC_H265);

if (h265DecoderSupport) {
    // 支持 H.265 解码
    std::string h265Url = ""; // 请填入 H265 Url 地址

    // 注意: ZegoAPIStreamExtraPlayInfo 中有其他的可配置项
    ZegoStreamExtraPlayInfo *playInfo = zego_stream_extra_info_create();
    zego_stream_extra_info_set_play_mode(playInfo, ZEGO::AV::CDN_ONLY);
    // H.265 CDN 拉流地址
    zego_stream_extra_info_add_rtmp_url(playInfo, h265Url.c_str());


    ZEGO::LIVEROOM::StartPlayingStream2(playStreamID.c_str(), playViewHwnd, playInfo);

    // 用户需要监听 onVideoDecoderError 回调,当编码器格式为 H.265 且错误码为 -3 时,表示软解性能不足,可能会出现低帧率现象。此时用户可以自行决定是否停止拉 H.265 码流,并重新拉 H.264 码流
}
else {
    // 不支持 H.265 解码
    std::string h264Url = ""; // 请填入 H265 Url 地址

    // 注意: ZegoAPIStreamExtraPlayInfo 中有其他的可配置项
    ZegoStreamExtraPlayInfo *playInfo = zego_stream_extra_info_create();
    zego_stream_extra_info_set_play_mode(playInfo, ZEGO::AV::CDN_ONLY);
    // H.264 CDN 拉流地址
    zego_stream_extra_info_add_rtmp_url(playInfo, h264Url.c_str());


    ZEGO::LIVEROOM::StartPlayingStream2(playStreamID.c_str(), playViewHwnd, playInfo);
} 

4.3 单主播直播

4.3.1 实时网络转推 CDN 直播

该场景具有以下两个特点:

  • 主播通过 ZEGO 实时音视频云转推到 CDN,通过 CDN 的转码能力,观众可以根据自身终端设备是否支持 H.265 视频解码,选择从 CDN 拉 H.265 码流或 H.264 码流。
  • 主播推 H.265 码流时,连麦嘉宾从 ZEGO 实时音视频云直接拉流进行实时互动,此时要求连麦嘉宾的终端设备支持 H.265 视频解码能力。

转推CDN 直播

主播端

  1. 初始化 SDK 后,调用 requireHardwareEncoder 接口开启硬件编码(若推流后更改配置,需要等下一次推流才生效),开启会使用 GPU 进行编码,降低 CPU 使用率。
  2. 调用 isVideoEncoderSupported 接口查询主播端设备是否支持指定视频编码类型。
  3. 推流前调用 setVideoCodecId 接口,通过 codecID 设置视频编码格式(若推流后更改配置,需要等下一次推流才生效)。如果设置了 H.265 编码,则:
    1. 可以调用 enableH265EncodeFallback 接口开启 H.265 编码失败后自动降级到 H.264 编码。开启后,当不支持 H.265 编码或 H.265 编码失败时,SDK 内部会尝试降级使用 H.264 编码进行推流;关闭后,当不支持 H.265 编码或 H.265 编码失败时,直接推流失败。
    2. 调用 SetCustomPublishTarget 接口添加 ZEGO 实时音视频云的音视频流转推至 CDN 的 URL 地址。
    3. 调用 startPublishing 接口开始推流,当推流成功后,同房间内其他用户可通过监听 onStreamUpdated 回调来获取流的新增情况。
    4. 开发者通知 App 的业务服务端该条推流的编码格式,以便通知拉流端根据不同的推流编码格式做相应的处理。
// 移动端使用 H.265 编码需要开启硬件编码
ZEGO::LIVEROOM::RequireHardwareEncoder(true);

// 查询是否支持 H.265 编码
bool h265EncoderSupport = ZEGO::LIVEROOM::IsVideoEncoderSupported(ZEGO::AV::VIDEO_CODEC_H265);

if (h265EncoderSupport) {
    // 支持 H.265 编码
    ZEGO::LIVEROOM::SetVideoCodecId(ZEGO::AV::VIDEO_CODEC_H265, ZEGO::AV::PUBLISH_CHN_MAIN);
}
else {
    // 不支持 H.265 编码
    ZEGO::LIVEROOM::SetVideoCodecId(ZEGO::AV::VIDEO_CODEC_DEFAULT, ZEGO::AV::PUBLISH_CHN_MAIN);
}

if (h265EncoderSupport) {
    // 通过 enableH265EncodeFallback 选择是否开启 H.265 编码失败自动降级能力。
    ZEGO::LIVEROOM::EnableH265EncodeFallback(true);
}

std::string publishStreamID = ""; // 请输入 streamID
std::string publishCdnUrl = ""; // 请输入 CdnUrl

// 添加 CDN 转推地址
ZEGO::LIVEROOM::SetCustomPublishTarget(publishCdnUrl.c_str(), ZEGO::AV::PUBLISH_CHN_MAIN);

ZEGO::LIVEROOM::StartPublishing(NULL, publishStreamID.c_str(), ZEGO::AV::ZEGO_JOIN_PUBLISH);

// 开发者通知 App 的业务服务端该条推流的编码格式,以便通知拉流端根据不同的推流编码格式做相应的处理

观众端

  1. 主播推流后,观众端通过 onStreamUpdated 接口收到流新增通知。
  2. 观众端从 App 的业务服务端获取该条推流的编码格式。
  • 如果是 H.264 格式,观众可以调用 startPlayingStream 接口从 CDN 直接拉主播端的流。
  • 如果是 H.265 格式,需要先调用 isVideoDecoderSupported 接口查询观众端自身设备是否支持 H.265 解码格式。
    • 若支持,则调用 startPlayingStream 接口从 CDN 拉 H.265 码流。用户需要监听 onVideoDecoderError 回调,当编码器格式为 H.265 且错误码为 -3 时,表示软解性能不足,可能会出现低帧率现象。此时用户可以自行决定是否停止拉 H.265 码流,并重新拉 H.264 码流。
    • 若不支持,则调用 startPlayingStream 接口从 CDN 拉 H.264 码流。
//收到流新增通知 onStreamUpdated
void PlayDemo::OnStreamUpdated(ZegoStreamUpdateType type, ZegoStreamInfo *pStreamInfo, unsigned int streamCount, const char *pszRoomID)
{
    int videoCodecID = 0; // 从 App 的业务服务端获取该条流的编码格式。
    std::string playStreamID = "";
    HWND playViewHwnd = NULL; // 拉流需要渲染的 view

    if (videoCodecID == ZEGO::AV::VIDEO_CODEC_H265)
    {
           // 编码格式为 H.265
    bool h265DecoderSupport = ZEGO::LIVEROOM::IsVideoDecoderSupported(ZEGO::AV::VIDEO_CODEC_H265);

    if (h265DecoderSupport) {
            // 支持 H.265 解码
            std::string h265Url = ""; // 请填入 H265 Url 地址

        // 注意: ZegoAPIStreamExtraPlayInfo 中有其他的可配置项
        ZegoStreamExtraPlayInfo *playInfo = zego_stream_extra_info_create();
        zego_stream_extra_info_set_play_mode(playInfo, ZEGO::AV::CDN_ONLY);
        // H.265 CDN 拉流地址
        zego_stream_extra_info_add_rtmp_url(playInfo, h265Url.c_str());


        ZEGO::LIVEROOM::StartPlayingStream2(playStreamID.c_str(), playViewHwnd, playInfo);

        // 用户需要监听 onVideoDecoderError 回调,当编码器格式为 H.265 且错误码为 -3 时,表示软解性能不足,可能会出现低帧率现象。此时用户可以自行决定是否停止拉 H.265 码流,并重新拉 H.264 码流
    }
    else {
        // 不支持 H.265 解码
        std::string h264Url = ""; // 请填入 H265 Url 地址

        // 注意: ZegoAPIStreamExtraPlayInfo 中有其他的可配置项
        ZegoStreamExtraPlayInfo *playInfo = zego_stream_extra_info_create();
        zego_stream_extra_info_set_play_mode(playInfo, ZEGO::AV::CDN_ONLY);
        // H.264 CDN 拉流地址
        zego_stream_extra_info_add_rtmp_url(playInfo, h264Url.c_str());


        ZEGO::LIVEROOM::StartPlayingStream2(playStreamID.c_str(), playViewHwnd, playInfo);
    }
    }
    else if (videoCodecID == ZEGO::AV::VIDEO_CODEC_DEFAULT) {
    // 编码格式为 H.264
    ZEGO::LIVEROOM::StartPlayingStream(playStreamID.c_str(), playViewHwnd);
    }
}

连麦嘉宾端

  1. 主播推流后,连麦嘉宾通过 onStreamUpdated 接口收到流的新增通知。
  2. 连麦嘉宾从 App de业务服务端获取该条推流的编码格式。
  • 如果是 H.264 格式,连麦嘉宾可以调用 startPlayingStream 接口从 ZEGO 实时音视频云直接拉主播端的流。
  • 如果是 H.265 格式,需要先调用 isVideoDecoderSupported 接口查询自身设备是否支持 H.265 解码格式。
    • 若支持,则调用 startPlayingStream 接口从 ZEGO 实时音视频云 拉 H.265 码流。
    • 若不支持,则提示本终端设备不支持拉该流。
//收到流新增通知 onStreamUpdated
void PlayDemo::OnStreamUpdated(ZegoStreamUpdateType type, ZegoStreamInfo *pStreamInfo, unsigned int streamCount, const char *pszRoomID)
{
    int videoCodecID = 0; // 从 App 的业务服务端获取该条流的编码格式。
    std::string playStreamID = "";
    HWND playViewHwnd = NULL; // 拉流需要渲染的 view

    if (videoCodecID == ZEGO::AV::VIDEO_CODEC_H265)
    {
    // 编码格式为 H.265
    bool h265DecoderSupport = ZEGO::LIVEROOM::IsVideoDecoderSupported(ZEGO::AV::VIDEO_CODEC_H265);
    // 不支持解码则不拉流
    if (h265DecoderSupport) {
               // 支持 H.265 解码
        ZEGO::LIVEROOM::StartPlayingStream(playStreamID.c_str(), playViewHwnd);
    }
    }
    else if (videoCodecID == ZEGO::AV::VIDEO_CODEC_DEFAULT) {
    // 编码格式为 H.264
    ZEGO::LIVEROOM::StartPlayingStream(playStreamID.c_str(), playViewHwnd);
    }
}

4.4 录制

如果进行本地服务端录制、云端录制、数据流录时使用了 H.265 编解码功能,则会影响录制文件的生成,详情如下:

在对推流(H.265 视频编码码流)进行录制时,有可能因为 H.265 编码而触发编码降级,此时会收到 onVideoEncoderChanged 回调,表示视频编码格式发生变更。

该场景下,为了避免对录制文件造成损坏,SDK 内部会结束并保存当前的录制任务,并自动重启一个新的录制任务。新录制任务的录制文件路径会重新生成,避免覆盖原始录制文件。新文件的生成规则为给原始的录制文件名基础上加一个时间戳:

例如,开发者传入的原始录制文件路径为:/user/data/mediarecord.mp4,则新的录制文件为: /user/data/mediarecord_1626880634948.mp4,其中 1626880634948 为当前时间戳。

如果开发者在录制期间收到过 onVideoEncoderChanged 回调,需要在录制结束后,收集录制文件存储路径下的其他文件。

5 API 参考列表

方法 描述
InitSDK 创建引擎
requireHardwareEncoder 开/关硬件编码
startPublishing 开始推流
startPlayingStream 开始拉流
setVideoCodecId 设置视频配置
onStreamUpdated 相同房间内其他用户推的流增加或减少的通知
isVideoEncoderSupported 是否支持指定视频编码类型
isVideoDecoderSupported 是否支持指定视频解码格式
enableH265EncodeFallback 是否开启 H.265 编码自动降级到 H.264 编码
onVideoEncoderChanged 视频编码器变更回调
mixStreamEx 开始混流任务

6 常见问题

  1. H.265 在硬编出现错误怎么办?

可以调用 enableH265EncodeFallback 接口开启降级功能(默认开启),若 H.265 硬编失败则降级成 H.264,若同时在使用录制功能,则录制文件变为两份。

  1. H.265 是否会自动从硬解降到软解?

会的,若解码时发现硬解失败,会自动降级成软解。

  1. H.265 如何收费?

客户端开启 H.265 功能不需要收费,但是混流输出 H.265 需要收取混流费用,比混流输出 H.264 价格更贵,详情可咨询销售。

  1. 混流输入 H.265 流,输出 H.264 流时,计费是否有变化?

没有变化,按输出 H.264 计费。

  1. H.265 解码对于硬件的要求是什么?

目前市场上所有机型都支持 H.265 解码,经测试大概在 2013 年之前的低端机型解码可能会有帧率波动。

本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈