SkeyeLive是OpenSKEYE开源流媒体团队开发的一款功能丰富的开源PC端流媒体推流拉流直播软件项目,目前支持Windows、Android版本,后续将支持ios、Linux版本,其中Windows版本的SkeyeLive支持多种源接入,包括Windows摄像头、麦克风、RTSP摄像机、屏幕桌面等,采集后经过x264编码、SkeyePusher推送到OpenSKEYE流媒体服务器进行转发,同时SkeyeLive还支持通过SkeyeRTSPClient拉取OpenSKEYE直播流,进行显示、播放,非常稳定、易用,用户可以基于SkeyeLive项目,开发类似于课堂直播、视频对讲等项目!

功能讲解

一、程序框架
SkeyeLive主要包括三个模块:采集、推送和直播,主要功能封装管理类Class CSourceManager中实现,接口非常简单,各模块分别提供开始和结束接口函数,方便界面调用;
界面调用接口:

 //开始捕获(采集)int StartCapture(SOURCE_TYPE eSourceType, int nCamId, int nAudioId, HWND hCapWnd, char* szURL, int nVideoWidth, int nVideoHeight, int nFps=, int nBitRate);//停止采集void StopCapture();//开始推流int StartPush(char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize = 1024);//停止推流void StopPush();//开始播放int StartPlay(char* szURL, HWND hShowWnd);//停止播放void StopPlay();

1、采集模块
采集分为本地音视频采集和RTSP流采集
本地音视频主要通过DShow进行采集,函数如下:

int CSourceManager::StartDSCapture(int nCamId, int nAudioId,HWND hShowWnd,int nVideoWidth, int nVideoHeight, int nFps, int nBitRate)

该函数主要实现本地音视频采集和音视频编码器的初始化(详见SkeyeLive源码),需要注意的是这里的参数设置:
(1) 本地采集的视频宽高和x264编码器的宽高需一致,数据格式建议设为YUY2(程序中默认为“YUY2"),因为在DShow的数据采集线程中需要进行编码前的格式转换(YUY2->I420),如果格式不统一,这里将要重写转换函数;
(2) 本地音频采样率默认为16000,这个设置在SkeyePusher中表现最佳,其他采样率还有待测试;
(3) 其他设置请参照DEVICE_CONFIG_INFO结构和Encoder_Config_Info结构的详细说明;

细心的童鞋应该已经发现RTSP流采集和流播放采用的是同一个类Class SkeyeLiveManager实现,如下:

 //接收网络RTSP流进行推流SkeyeLiveManager m_netStreamCapture;//接收OpenSKEYE推出的RTSP流进行播放SkeyeLiveManager m_netStreamPlayer;

这个类封装了libSkeyeLive库提供的接口,方便调用;这个库集成在SkeyeLive源码中,也是SkeyeLive的核心;她主要实现了从网络接收RTSP流进行解析,获取H264编码数据和AAC编码数据分别进行解码并呈现和播放,当然,作为Capturer而言,我们只需要用她获取到编码数据即可。


2、推送模块
推送则显得异常简单,直接调用原生态的SkeyePusher接口,即可实现:

//开始推流
int CSourceManager::StartPush(char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize)
{//创建推送器指针m_sPushInfo.pusherHandle = SkeyePusher_Create();strcpy(m_sPushInfo.pushServerAddr,  ServerIp);m_sPushInfo.pushServerPort = nPushPort;strcpy(m_sPushInfo.sdpName, sPushName);Skeye_U32 nRet = 0;if (NULL != m_sPushInfo.pusherHandle ){//设置推送回调,可以获取推送器反馈的信息SkeyePusher_SetEventCallback(m_sPushInfo.pusherHandle, __SkeyePusher_Callback, 0, NULL);//开启流推送Skeye_U32 nRet = SkeyePusher_StartStream(m_sPushInfo.pusherHandle , ServerIp, nPushPort, sPushName, "admin", "admin", (Skeye_MEDIA_INFO_T*)&m_mediainfo, nPushBufSize, 0);//512-2048if(nRet>=0){m_bPushing = TRUE;}else{StopPush();}}return nRet;
}
//停止推流
void CSourceManager::StopPush()
{//Close Pusherif (NULL != m_sPushInfo.pusherHandle){SkeyePusher_StopStream(m_sPushInfo.pusherHandle);SkeyePusher_Release(m_sPushInfo.pusherHandle);m_sPushInfo.pusherHandle = NULL;}m_bPushing = FALSE;m_bAVSync = FALSE;
}

唯一需要注意的是推送标志m_bPushing,这个标志将在数据回调函数中起到真正的推送开关的作用(严格的说在StartPush中也应该调用m_bPushing判断是否推送已经进行)。


3、直播模块
直播在采集模块中采集网络流时提到过,也是直接调用类Class SkeyeLiveManager接口实现:

//开始播放
int CSourceManager::StartPlay(char* szURL, HWND hShowWnd)
{m_sPlayInfo.rtspSourceId = m_netStreamPlayer.Start(szURL, hShowWnd, DISPLAY_FORMAT_RGB24_GDI, 0x01, "", "");m_netStreamPlayer.Config(3, TRUE, TRUE);return m_sPlayInfo.rtspSourceId ;
}
//停止播放
void CSourceManager::StopPlay()
{m_netStreamPlayer.Close();
}

源码下载:https://gitee.com/visual-opening/skeylive

SkeyeLive开源流媒体同屏直播软件源码功能框架解析相关推荐

  1. 直播软件源码,实现一个简单的直播功能

    概述 一直好奇直播软件源码这个东东是如何实现的,譬如音视频流是如何采集的? 音视频流是如何推送到订阅方 ? 如何支撑上万级.百万级用户同时观看直播 ? 功能设计 如上图所示为直播软件源码 Demo 实 ...

  2. 直播软件源码开发,实现小程序直播的功能

    为了方便用户观看,有些直播软件源码支持小程序端观看,那么小程序的直播软件源码功能如何实现呢,就让我们一起看一下吧. 1.添加直播组件 以mpvue为例 //app.json "plugins ...

  3. Android分屏直播方案,直播软件源码如何在Android端实现多人视频通话

    本篇主要讨论直播软件源码如何在Android端实现多人视频通话.主要需要实现以下功能: 随着加入人数和他们的手机摄像头分辨率的变化,显示不同的UI,即所谓的"分屏" 点击分屏中的小 ...

  4. 今天获取的云蹦迪直播软件源码全开源

    意:第2,3步只在第一次运行时需要配置 一定要按照顺序执行,执行顺序有错会报错 开播 在抖音找到自己的直播间,复制直播间号(绿色区域是直播间号)(只在第一次运行时需要) 在解压后的debug文件夹的s ...

  5. 通过Nginx实现直播软件源码的推流和拉流

    推流和拉流是直播软件源码实现直播的重要步骤,今天我们分析一下如何通过Nginx实现直播软件源码的推拉流. ​ 理论介绍 1.RMTP, Real Time Messaging Protocol 实时消 ...

  6. 直播软件源码如何在Android端实现多人视频通话

    本篇主要讨论直播软件源码如何在Android端实现多人视频通话.主要需要实现以下功能: 随着加入人数和他们的手机摄像头分辨率的变化,显示不同的UI,即所谓的"分屏" 点击分屏中的小 ...

  7. 直播软件源码如何实现直播flash插件

    直播软件源码如何实现直播flash插件 项目搭建 原有的项目是用的layui+jq搭建.现在将大屏部分独立出来: 开心到飞起,哈哈哈 现在大屏单独出来做,我采用了react + react-mobx; ...

  8. 实现简单的直播互动功能,直播软件源码是如何做的

    近两年,很多电商平台开始关注起直播互动电商,希望在直播中,也可以增加互动,例如在直播过程中,抛出限量优惠商品,实时发送抢购的消息给观众.于是我们做了一个简单的直播软件源码Demo. Demo大致的整体 ...

  9. 一对一直播软件源码开发,iOS视频采集的实现过程

    在一对一直播软件源码日益火热的发展形势下,音视频开发(采集.编解码.传输.播放.美颜)等技术也随之成为开发者们关注的重点,本系列文章就音视频开发过程中所运用到的技术和原理进行梳理和总结. 认识 AVC ...

  10. 直播软件源码开发,直播间内消息系统的实现

    在直播软件源码开发过程中,消息系统是非常关键的,无论是直播间内的消息还是平台内的消息,都关系着用户的使用体验,所以今天我们先用一个简单的"拉"模型搭建一个简单的直播间消息系统. 基 ...

最新文章

  1. 果断收藏!一张版图带你摸清全球10大自动驾驶联盟布局
  2. boost::hana::members用法的测试程序
  3. nginx绑定多个端口
  4. Git 远程配置_03
  5. Adobe illustrator 设置字体和微调 - 连载 10
  6. Android Studio连接手机没反应,提示错误adb.exe start-server' failed -- run manually if necessary
  7. The Geometry has no Z values 解决办法
  8. SpringBoot中模板引擎thymeleaf
  9. 实验报告-python文库_Python实验报告
  10. android Baseadapter 和 ViewHolder的使用
  11. java 在线参考手册
  12. 不支持S/W HEVC(H265)解码的有效解决方案
  13. java设置列宽_java用POI设置Excel的列宽
  14. git如何拉去开发的 最新代码_git拉取代码到本地
  15. 关于Android 日历事件的实现
  16. 程序猿麒麟臂打造之路(健身一)
  17. SpringMVC 通过Map、Model和ModelMap向页面传值
  18. C# 浅拷贝与深拷贝
  19. 百度鹰眼android开发,百度鹰眼Android SDK 运行配置
  20. c语言自学怎么学精,新手自学C语言提高效率的方法(混精)

热门文章

  1. ASP + SQL Server聊天室设计实例
  2. Linux计划任务以及进程检测与控制
  3. 教育网IPv6网址大全,在学校记流量的必收藏。(推荐用乐乎下载,速度达到1M以上)
  4. python写诗代码_我们分析了超过50万首诗歌,教你用代码写诗(附代码)
  5. 使用python控制其他软件运行并操作处理数据_Python 运行其他程序
  6. python查单词音标_有没有通过读音或音标就能查出英语单词的办法,比如发音查词软件?...
  7. 思考: 现有 图像分割算法 的缺陷
  8. Directx游戏中嵌入IE浏览器实现过程
  9. Safari浏览器兼容性问题
  10. IT行业含金量较高的证书汇总