1、如何使用 SkeyeLive Server SDK 开发
-
首先, 我们链接
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 开发
-
首先, 我们链接
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
即可.