如何快速实现Windows平台屏幕摄像头采集并推送RTMP|轻量级RTSP服务能力?

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
简介: 一个好的推送模块,除了实现高效率的编码传输外,还要有好的音视频采集机制和灵活的架构支持,便于后期功能扩展,比如实时快照、预览、实时录像等。除此之外,还要有好的交互机制(比如envent callback)、低延迟和长期运行稳定的性能。

技术背景

好多开发者跟我们做技术交流的时候,会问到如何快速实现Windows平台屏幕摄像头推流能力?一个好的Windows推送模块,需要注意哪些技术细节?

技术探讨

本文以Windows平台为例,谈谈我们对这块的理解。大牛直播SDK的RTMP推送|轻量级RTSP服务模块实现主要涉及到SDK的初始化、视频采集设置、音频采集设置、编码设置、推流设置以及实时预览和停止预览等功能:

image.gif


目前,以RTMP推送模块为例,目前我们主要设计支持以下功能:

  • 音频编码:AAC/SPEEX;
  • 视频编码:H.264、H.265;
  • 推流协议:RTMP;
  • [音视频]支持纯音频/纯视频/音视频推送;
  • [屏幕/摄像头]支持帧率、关键帧间隔(GOP)、码率(bit-rate)设置;
  • [屏幕]支持屏幕裁剪,根据帧率和推送分辨率,自动推荐码流;
  • [摄像头]支持摄像头选择、分辨率设置、帧率设置;
  • [摄像头]摄像头支持水平反转、垂直反转、0° 90° 180° 270°旋转;
  • [屏幕]支持DXGI采集设置、启/停用Aero;
  • [音频]采集麦克风;
  • [音频]采集扬声器;
  • [预览]支持推送端实时预览;
  • 支持实时静音、取消静音;
  • [对接服务器]支持自建标准RTMP服务器或CDN;
  • 支持断网自动重连、网络状态回调;
  • 屏幕和摄像头合成/多层合成;
  • 支持窗口采集(一般不建议使用);
  • 支持实时动态水印;
  • 支持实时快照;
  • 支持降噪处理、自动增益控制、VAD端点检测;
  • 支持扬声器和麦克风混音;
  • 支持外部编码前音视频数据对接;
  • 支持外部编码后音视频数据对接;
  • 支持RTMP扩展H.265(需设备支持H.265特定机型硬编码)和Enhanced RTMP;
  • 支持特定机型硬编码;
  • 支持实时音量调节;
  • 支持扩展录像模块;
  • 支持Unity接口;
  • 支持H.264扩展SEI发送模块;
  • 支持Windows7及以上版本。

如果是轻量级RTSP服务:

  • [基础功能]支持Windows平台RTMP直播推送模块常规功能;
  • [音频格式]AAC;
  • [视频格式]H.264、H.265;
  • [协议类型]RTSP;
  • [传输模式]支持单播和组播模式;
  • [端口设置]支持RTSP端口设置;
  • [鉴权设置]支持RTSP鉴权用户名、密码设置;
  • [获取session连接数]支持获取当前RTSP服务会话连接数;
  • [多服务支持]支持同时创建多个内置RTSP服务;
  • [RTSP url回调]支持设置后的rtsp url通过event回调到上层。

1. 模块初始化和环境设置

  • 设置日志路径:在初始化SDK之前,可以调用相关接口设置日志文件的存放路径,以便后续调试和日志分析。
  • 初始化SDK:调用NT_PB_Init()接口完成SDK的初始化。注意,无论后续是否进行多实例推送,Init()接口都仅需调用一次。

2. 视频采集设置

  • 数据源选择:支持从摄像头、屏幕或外部数据源采集视频数据。
  • 参数设置:包括帧率、分辨率、码率、关键帧间隔等。这些参数可以通过SDK接口单独设置,以满足不同的推流需求。
  • 摄像头设置:支持摄像头选择、分辨率设置、帧率设置、水平/垂直翻转、旋转等。
  • 屏幕采集:支持全屏采集或部分区域采集,同时支持DXGI采集设置和启/停用Aero等功能。

3. 音频采集设置

  • 音频源选择:支持采集麦克风音频、扬声器音频或进行混音输出。
  • 编码设置:默认使用AAC编码模式,但也可以选择SPEEX编码模式以获取更低的码率。
  • 音频处理:支持噪音抑制、自动增益控制、回音消除等音频处理功能。

4. 编码设置

  • 视频编码:支持H.264和H.265编码。在Windows 64位系统上,如果推RTMP流,需要服务器支持RTMP H.265扩展(或Enhanced RTMP),同时播放器SDK也需要同步支持RTMP H.265扩展播放。
  • 音频编码:如前所述,支持AAC和SPEEX编码。

5. 推流设置

  • 推流协议:看是使用RTMP还是轻量级RTSP服务。
  • 推流地址:如果是RTMP,可以设置RTMP服务器的推流地址,可以支持同时推送到多个URL(如一个内网服务器,一个外网服务器),如果是轻量级RTSP服务,发布RTSP流后,会回调上来一个可供拉流播放的RTSP URL。
  • 网络状态回调:支持断网自动重连和网络状态回调功能,以确保推流的稳定性和可靠性。

6. 实时预览和停止预览

  • 实时预览:支持在推流前进行实时预览,以便检查视频和音频的采集效果。
  • 停止预览:在推流过程中或预览时,可以随时停止预览以节省系统资源。

7. 其他功能

  • 支持多种操作系统:大牛直播SDK推送端支持Windows 7及以上系统。
  • 集成示例:提供了C++和C#两套接口示例(如WIN-PublisherSDK-CPP-Demo和WIN-PublisherSDK-CSharp-Demo),方便开发者参考和集成。
  • 扩展功能:支持实时快照、实时录像、降噪处理、自动增益控制、VAD端点检测等扩展功能。

总结

一个好的推送模块,除了实现高效率的编码传输外,还要有好的音视频采集机制和灵活的架构支持,便于后期功能扩展,比如实时快照、预览、实时录像等。除此之外,还要有好的交互机制(比如envent callback)、低延迟和长期运行稳定的性能。

相关文章
|
24天前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
166 4
|
1月前
|
边缘计算 安全 网络安全
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
90 9
|
1月前
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
39 0
Windows 平台安装 MongoDB
|
2月前
|
监控 C# 块存储
Windows平台RTSP|RTMP播放器如何叠加OSD文字
做Windows平台RTSP|RTMP播放器的时候,特别是多路播放场景下,开发者希望可以给每一路RTSP或RTMP流添加个额外的OSD台标,以区分不同的设备信息(比如添加摄像头所在位置),本文主要探讨,如何动态添加OSD台标。
Windows平台RTSP|RTMP播放器如何叠加OSD文字
|
1月前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
107 3
|
1月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
35 1
|
2月前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
|
1月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
1月前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
162 0

热门文章

最新文章