SkeyeLive同屏直播库库功能介绍和接口说明与调用

量子计算
• 阅读 213

SkeyeLive是OpenSKEYE开源流媒体团队开发的一个集采集,编码,RTSP/RTMP推流和流媒体RTSP服务于一身的通用库,目前支持Windows,Android平台,通过SkeyeLive我们就可以避免接触到稍显复杂的音视频源采集,编码和流媒体推送以及RTSP/RTP/RTCP服务流程,只需要调用SkeyeLive的几个API接口,就能轻松、稳定地把流媒体音视频数据推送给SkeyeSMS服务器以及发布RTSP服务,RTSP服务支持组播和单播两种模式,可用于同屏直播,延时在300ms以内。

libSkeyeLive API接口说明:

· SkeyeLive_Create

接口声明:

LIB_SKEYELIVE_API SKEYELIVE_HANDLE SkeyeLive_Create();

接口说明:
创建一个SkeyeLive实例句柄,并返回,在功能模块接口调用时都要用到,一个句柄代表一个实例,该函数可以多次调用,用SkeyeLive_Release接口进行销毁。

· SkeyeLive_Release

接口声明:

LIB_SKEYELIVE_API void SkeyeLive_Release(SKEYELIVE_HANDLE handler);

接口说明:
销毁一个由SkeyeLive_Create()创建的实例;
参数说明:
handler: [IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄

· SkeyeLive_StartCapture

接口声明:

LIB_SKEYELIVE_API int SkeyeLive_StartCapture(SKEYELIVE_HANDLE handler, SOURCE_TYPE eSourceType, int nCamId, int nAudioId,  SKEYELIVE_HANDLE hCapWnd, int nEncoderType,
    int nVideoWidth=640, int nVideoHeight=480, int nFps=25, int nBitRate=2048, char* szDataType = "YUY2",  //VIDEO PARAM
    int nSampleRate=44100, int nChannel=2 );

接口说明:
开始一个数据源的采集,并初始化编码器;采集成功返回1,采集失败返回负值,正在采集返回0;
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄
eSourceType:[IN] 数据源类型,参考以下数据结构:
typedef enum tagSOURCE_TYPE
{

SOURCE_LOCAL_CAMERA = 0,//本地音视频
SOURCE_SCREEN_CAPTURE =1,//屏幕捕获
SOURCE_FILE_STREAM = 2,       //文件流推送(mp4,ts,flv???)
SOURCE_RTSP_STREAM=3,//RTSP流
SOURCE_RTMP_STREAM=4,//RTMP流
//     Any other Source to push

}SOURCE_TYPE;

nCamId:[IN] 本地DShow视频采集口ID,eSourceType==SOURCE_LOCAL_CAMERA 时有效,从0开始,,小于0标示为不起用;该ID可以通过SkeyeLive_GetCameraList()接口函数枚举,通过顺序获取;

nAudioId:[IN] 本地DShow音频采集口ID,eSourceType==SOURCE_LOCAL_CAMERA 时有效,从0开始,小于0标示为不起用;该ID可以通过SkeyeLive_GetCameraList()接口函数枚举,通过顺序获取;

hCapWnd:[IN] HWND窗口句柄,用于显示预览采集的视频源;
nEncoderType:[IN] 编码类型,

        0=默认编码器(效率最低,通用性强) 
        1=软编码(效率高,通用性不强)
        2=硬件编码(效率最高,通用性最低,需要英伟达独立显卡支持)
        参考以下数据结构:
        typedef enum tagENCODER_TYPE

{

ENCODER_DEFAULT                 = 0, //默认编码器
ENCODER_FASTSOFTWARE     = 1,//快速软编码
ENCODER_FASTHARDWARE     = 2,//快速硬件编码,需要Nvidia显卡支持

}ENCODER_TYPE;

nVideoWidth:[IN] 指定采集视频的宽度

nVideoHeight:[IN] 指定采集视频的高度

nFps:[IN] 指定采集视频的帧率

nBitRate:[IN] 指定编码视频的比特率(码率)

szDataType:[IN] 指定采集数据源的格式, eSourceType==SOURCE_LOCAL_CAMERA 或者eSourceType==SOURCE_SCREEN_CAPTURE时有效,目前屏幕采集只支持“RGB24”格式, 摄像机采集支持“YUY2”和“RGB24”格式;

nSampleRate:[IN] 指定音频采集采样率

nChannel:[IN] 指定音频采集通道数 1=单通道 2=双通道

· SkeyeLive_StopCapture

接口声明:

LIB_SKEYELIVE_API void SkeyeLive_StopCapture(SKEYELIVE_HANDLE handler);

接口说明:停止采集
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄

· SkeyeLive_StartPush

接口声明:

LIB_SKEYELIVE_API int SkeyeLive_StartPush(SKEYELIVE_HANDLE handler, PUSH_TYPE pushType, char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize = 1024);

接口说明:开始进行流推送,目前版本支持RTMP推送,如果要同时开启多种流推送需要调用多次该函数,同时停止的时候也需要多次调用SkeyeLive_StopPush()来停止,由参数指定停止哪种类型的流
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄
pushType: [IN] 流推送类型,参考如下数据结构:
typedef enum tagPUSH_TYPE
{

PUSH_NONE = 0,
PUSH_RTSP ,
PUSH_RTMP ,

}PUSH_TYPE;

ServerIp: [IN] 推送的(RTMP, RTSP)流媒体服务器IP
nPushPort: [IN] 推送流的服务器端口
sPushName: [IN] 推送流名称
nPushBufSize : [IN] 推送缓存大小,单位: KB

· SkeyeLive_StopPush

接口声明:

LIB_SKEYELIVE_API void SkeyeLive_StopPush(SKEYELIVE_HANDLE handler, PUSH_TYPE pushType);

接口说明:停止推送
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄
pushType: [IN] 推送流类型,参考如下数据结构:
typedef enum tagPUSH_TYPE
{

PUSH_NONE = 0,
PUSH_RTSP ,
PUSH_RTMP ,

}PUSH_TYPE;

· SkeyeLive_StartServer

接口声明:

LIB_SKEYELIVE_API int SkeyeLive_StartServer(SKEYELIVE_HANDLE handler, int listenport, char *username, char *password,  SKEYELIVE_CHANNEL_INFO_T *channelInfo, int channelNum);

接口说明:开启RTSP流媒体服务发布
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄
listenport:[IN] RTSP服务发布端口
username:[IN] RTSP服务发布流拉流验证用户名,无需验证填空
password:[IN] RTSP服务发布流拉流验证密码,无需验证填空
channelInfo:[IN] 流发布通道信息参数设置,可设置多个通道,一个通道标识一个流,通道数由channelNum指定,通道参数结构SKEYELIVE_CHANNEL_INFO_T说明如下:
typedef struct __SKEYELIVE_CHANNEL_INFO_T
{

int        id;             //通道号ID
char    name[64];   //该通道流名称
int        enable_multicast;        //是否启用组播
char    multicast_addr[36];      //组播IP地址,默认为238.255.255.255
unsigned char    ttl;     // 组播IP包生存时间(一个包到达目的地之前跳过网络的最大次数)

}SKEYELIVE_CHANNEL_INFO_T;
channelNum:[IN]

· SkeyeLive_StopServer

接口声明:

LIB_SKEYELIVE_API void SkeyeLive_StopServer(SKEYELIVE_HANDLE handler);

接口说明:停止RTSP服务
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄

· SkeyeLive_GetAudioInputDevList

接口声明:

LIB_SKEYELIVE_API SKEYELIVE_DEVICE_LIST_T* SkeyeLive_GetAudioInputDevList(SKEYELIVE_HANDLE handler);

接口说明:枚举音频输入设备,返回值为一个音频输入设备链表,链表由头到尾从0递增就是采集设备的编号ID;
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄

· SkeyeLive_GetCameraList

接口声明:

 LIB_SKEYELIVE_API SKEYELIVE_DEVICE_LIST_T* SkeyeLive_GetCameraList(SKEYELIVE_HANDLE handler);

接口说明:枚举视频采集设备,返回值为一个视频采集设备链表,链表由头到尾从0递增就是采集设备的编号ID;
参数说明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型, 由SkeyeLive_Create()创建的实例句柄

libSkeyeLive库调用流程:
1) 通过SkeyeLive_Create()创建一个实例,这个实例在其他的所有接口调用时都需要用到;
2} 功能模块调用,如采集,推流,服务发布等;
3) 停止功能模块调用;
4) SkeyeLive_Release()销毁由SkeyeLive_Create()创建的一个实例。

SkeyeLive 调用Demo

SkeyeLive 调用Demo可以在gitee上下载,界面如下图所示:

SkeyeLive同屏直播库库功能介绍和接口说明与调用

延时对比:

  1. SkeyeExPlayer多功能播放器:
    SkeyeLive同屏直播库库功能介绍和接口说明与调用
  2. SkeyePlayer极速播放器
    SkeyeLive同屏直播库库功能介绍和接口说明与调用
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
RTP、RTCP和RTSP协议基础
1RTSP概述1.1RTSP概念RTSP(RealTimeStreamProtocol)是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传
Easter79 Easter79
3年前
srs
SRS简介SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTPFLV流、转封
GoCoding GoCoding
4年前
RTSP 流相关工具介绍
RTSP(RealTimeStreamingProtocol),实时流协议,是一种应用层协议,专为流媒体使用。本文将介绍GStreamer,VLC,FFmpeg这几个工具,如何发送、接收RTSP流。前提GStreamerGStreamer:https://gstreamer.freedesktop.org/GStre
liuzhen007 liuzhen007
4年前
Golang根据URL判断媒体协议
目录问题解决问题如何根据一个流媒体地址URL判断对应的流媒体协议,比如RTMP、RTSP协议等。解决这里提供一个方法,可以直接拿来用。golangfuncgetProtocol(urlstring)(string,error){ifurl""{index:strings.Index(url,":")
Stella981 Stella981
3年前
Github上最受欢迎的10大开源免费的RTSP流媒体项目
Github选出dTOP10开源免费的RTSP流媒体项目,以下是具体排名及星星数。!(http://p1ttipv6.byteimg.com/large/pgcimage/88353d8637ff42b7b2d2e12fa11e46ee)1、Easydarwin星星数:4,307Easydarwin是国内团队开发的开
Stella981 Stella981
3年前
FFmpeg命令行工具学习(四):FFmpeg 采集设备
在使用FFmpeg作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码、封装、传输等操作。例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的音视频数据进行编码,最后将编码后的数据封装成多媒体文件或者作为音视频流发送到服务器上(流媒体)。出于硬件环境和篇幅的限制,本文主要讲的时Mac平台下通过F
Stella981 Stella981
3年前
EasyDSS高性能流媒体服务器开发RTMP直播同步输出HLS(m3u8)录像功能实现时移回放的方案
EasyDSS商用流媒体服务器解决方案是由EasyDarwin开源团队原班人马开发的一套集流媒体点播、转码与管理、直播、录像、检索、时移回看于一体的一套完整的商用流媒体服务器解决方案,支持RTMP推流,RTMP/HLS分发。\EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS!详情可访问easydss官网:http://www.
Stella981 Stella981
3年前
EasyDSS流媒体服务器软件对数据库Sqlite3和MySQL的同时支持说明
EasyDSS流媒体音视频直播与点播服务器软件,是一套提供一站式的转码、点播、直播、检索、回放、录像下载服务的高性能RTMP/HLS/HTTPFLV流媒体服务,极大地简化了流媒体相关业务的开发和集成的工作。其中,点播功能主要包含:上传、转码、分发。直播功能,主要包含:直播、录像,直播支持RTMP输入,RTMP/HLS/HTTPFLV
Stella981 Stella981
3年前
LiveQing稳定高性能RTMP流媒体服务器软件
青柿流媒体服务解决方案(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.liveqing.com)LiveQing云平台直播点播流媒体服务\LiveGBS国标GB28181无插件流媒体服务LiveNVR安防Onvif/RTSP流媒体服务;支持