SkeyeLive开发文档

1、如何使用 SkeyeLive Server SDK 开发

SkeyeLive Server示例地址

  • 首先, 我们链接 libskeyelive.lib 并包含 skeyelive.h.

  • 然后,创建 SkeyeLive 实例:

   SkeyeLive live(argc, argv, SkeyeLive::ConnectionType::Type_Kcp);

注意,Qt 环境下无需额外传入 argc, argv.

  • 使用 setLiveVideoParams() 设置视频参数, setLiveAudioParams() 设置音频参数.

  • 根据自己需要采集 屏幕/相机/音频输入(麦克风)/音频输出(扬声器)

  • startCaptureCamera() 开始采集相机

    注意,相机会叠加在屏幕之上,并且可以设置位置和大小.

  • startCaptureScreen() 开始采集屏幕

  • startCaptureAudioInput() 开始采集音频输入(麦克风)

  • startCaptureAudioOutput() 开始采集音频输出(扬声器)

  • 可以使用 appendOverlay() 添加叠加层,支持两种叠加类型,支持叠加层序.

  • 文本叠加 Overlay_Text

  • 图像叠加 Overlay_Image

  • 最后,使用 startServer() 开启服务

整个流程的代码:

#include "skeyelive.h"

#include <thread>

static int server_run(int argc, char *argv[])
{
    using namespace skeye_live;

    Overlay *text = new Overlay_Text(u8"测试测试测试", "微软雅黑", 32, "#ffff00");

    text->setPosition(400, 500);

    SkeyeLive live(argc, argv, SkeyeLive::ConnectionType::Type_Kcp);

    live.setLiveVideoParams(1920, 1080, 30, 30, 2048, SkeyeLive::VideoEncode::Encode_H264, SkeyeLive::EncoderType::Type_Nvidia);

    live.setLiveAudioParams(44100, 2, 64, SkeyeLive::AudioEncode::Encode_AAC);

    live.appendOverlay(text);

    auto cameraList = SkeyeLive::availableCameras();
    if (cameraList.size() > 0) {
        auto device = *cameraList.begin();
        auto settings = device.supportedSettings();
        for (const auto &s: std::as_const(settings)) {
            if (s.pixelFormat() == PixelFormat::Format_YUYV) {
                live.startCaptureCamera(device, s);
                break;
            }
        }
    }

    auto screenList = SkeyeLive::availableScreens();
    if (screenList.size() > 0)
        live.startCaptureScreen(*(screenList.begin()));

    const auto devices = SkeyeLive::availableAudioDevices();
    for (const auto &device: devices) {
        if (device.type() == skeye_live::AudioType::Audio_Input) {
            live.startCaptureAudioInput(device);
            break;
        }
    }

    for (const auto &device: devices) {
        if (device.type() == skeye_live::AudioType::Audio_Output) {
            live.startCaptureAudioOutput(device);
            break;
        }
    }

    return live.startServer("0.0.0.0");
}

int main(int argc, char *argv[])
{
    std::thread thread(&server_run, argc, argv);
    thread.join();

    return EXIT_SUCCESS;
}

2、如何使用 SkeyeLive Client SDK 开发

SkeyeLive Client示例地址

  • 首先, 我们链接 libskeyeliveplayer.lib 并包含 skeyeliveplayer.h.

  • 然后,创建 SkeyeLivePlayer 实例:

   SkeyeLivePlayer::initializePlayer();
   SkeyeLivePlayer player(SkeyeLivePlayer::ConnectionType::Type_Kcp, SkeyeLivePlayer::DecoderType::Type_Nvidia);

注意,Qt 环境下无需调用 SkeyeLivePlayer::initializePlayer().

  • 接着开启连接即可:
   player.startLiveConnection("skeyelive://127.0.0.1:8432", SkeyeLivePlayer::VideoPixelFormat::Format_RGBA32, &player_callback, nullptr);

注意,SkeyeLive 播放的流地址格式为:skeyelive:// + ip + : + port.

  • 最后,码流数据通过回调传递:
   int player_callback(SkeyeLivePlayer::CallbackType type, uint64_t data, uint32_t dataSize, FrameInfo *frameInfo, void *userPtr)
   {
   	if (type == SkeyeLivePlayer::CallbackType::VideoFrame) {
   		Image image((char *)data, dataSize);
   	}
   }

注意,默认回调数据为解码数据,如果不需要解码,startLiveConnection() 最后的参数 decode 传入 false 即可.

猜你喜欢

转载自blog.csdn.net/weixin_42113310/article/details/129734734