2、方案选择

由于是在现有的产品上新增功能,那么为了减少总的成本,故选择只动应用软件的来实现需求。

现有的产品中的第三方库比较有限,连个ffmpeg都没,所以要选择可以直接集成代码进来的第三方库,最后选中了srs_librtmp。虽然它已经停止维护了,但是主要功能没问题,使用简单,且可以直接集成代码。

3、实现代码

step1:去github上面先把源码下下来。

GitHub - ossrs/srs-librtmp at master

step2:把对应的代码文件集成到项目里。

这里只需要src/srs目录下的srs_librtmp.h和srs_librtmp.cpp就行了,如下图

step3:封装成工具类

封装过程中使用了另一个第三方库POCO,这个库只要用来实现线程,不想要的话可以直接改掉。

RTMPPusher.h

// Created by zhengqiuxu on 2023/8/5. #ifndef VIS_G3_SOFTWARE_RTMPPUSHER_H #define VIS_G3_SOFTWARE_RTMPPUSHER_H #include <Poco/Runnable.h> #include <Poco/Thread.h> #include <mutex> #include "srs_librtmp.h" class RTMPPusher : public Poco::Runnable{ public: // h264 nalu struct NaluHead unsigned type : 5; unsigned nal_ref_idc : 2; unsigned forbidden_zero_bit : 1; RTMPPusher(); * 初始化 * @param url : 推流地址 * @return 0:成功 其他:失败 int init(const std::string url); * 启动线程 void start(); * 设置一帧H264数据帧 (Simple RTMP Server) 是国人写的一款非常优秀的开源流媒体服务器软件, 使用 C++ 开发,可用于直播/录播/视频客服等多种场景,其定位是运营级的互联网直播服务器集群。本来打算 使用 srs 来做 rtmp 推流 器,但是 srs 只提供了 Linux 平台的 srs _ lib rtmp . lib 静态库和 Demo,费了些功夫,修修改改成功编译了 Windows 下的 srs _ lib rtmp . lib 静态库,但是添加进工程后,工程可以打开库,却识别不了所调用的 API,由于时间问题暂时放弃。 本文详细介绍了 SRS 流媒体服务器WebRTC 推流 的实战配置,从环境准备到核心参数设置,涵盖常见问题解决方案和Chrome调试技巧。特别针对WebRTC 推流 中的黑屏、延迟高等问题提供优化建议,帮助开发者快速构建低延迟直播系统。 客户端 Rtmp 推流 到服务器,服务器将消息缓存到各个客户端消费者自己的队列中,数据 使用 引用计数没有内存拷贝操作。过期数据将被清除。客户端消费者是 Srs Rtmp ConnPlay类型,消费者播放流的流程在下一篇文章中介绍。 SRS 流媒体服务器源码分析(一): Rtmp publish流程 - 简书。 lib rtmp 的主要应用场景包括: 播放 RTMP 流:譬如 rtmp dump,将服务器的流读取后保存为flv文件。 推流 :提供 推流 RTMP 服务器。基于同步阻塞socket,客户端用可以了。arm:编译出来给arm- linux 用,譬如某些设备上,采集后推送到 RTMP 服务器。不支持直接发布h.26 srs - lib rtmp 可以直接推送 H264 格式的 rtmp 数据流,所以可以将海思HI3516通过VENC编码后的 H264 裸流数据直接通过 srs - lib rtmp 发送到阿里直播平台。 这里需要注意的是 srs - lib rtmp 流地址的拼接,可以参考https://github.com/os srs / srs /wiki/v3_CN_ Rtmp UrlVhost 阿里直播平台地址格式一般为: url+appName+S... 本文转载自博客园博主[rtc8_com](https://home.cnblogs.com/u/onlycoder/的博文:开发 Rtmp 推流 端开发库的几种选择方案 要开发一个 Rtmp 协议的 推流 工具,目前用以下几种 实现 方案: 1、 使用 ffmpeg方案,ffmpeg本身功能非常丰富,如果采用这个方案,基本上所有功能都可以搞定,不用再引入其它的第三方库,而且还支持跨平台。要 使用 ffmpeg 推流 ,编译时一定要把x264, lib faac, rtmp 协议打进去,编译出来的so,dll大概2M多一点。ffmpeg 推流 方案实 本文详细介绍了如何 使用 lib rtmp 实现 RTMP 推流 SRS 服务器的完整流程,包括环境准备、核心API解析、FLV文件处理及常见问题解决方案。特别针对开发者在实际操作中可能遇到的握手失败、时间戳异常等问题提供了实用的避坑指南,帮助快速搭建稳定的流媒体 推流 系统。 下载地址:https://github.com/os srs / srs /tree/master 3、 SRS 可以直接导出一个 srs - lib rtmp 的project,编译成.h和.a 使用 。或者导出为... 这篇博客主要讲述 使用 srs _ lib rtmp 拉流,大概会提一下 lib rtmp 拉流,详情请关注大神雷神(雷霄骅)的博客https://blog.csdn.net/leixiaohua1020/article/details/12971635 此外,此篇博客讲的是 RTMP 拉流保存为 h264 格式,所以要确保流中视频的格式是AVC(H.264) 使用 lib rtmp 拉流 lib rtmp 是通过调用i... 首先要感谢winlin写出这么精简的东西 先说说,我是怎么用它的: 1.按照wiki上说的(https://github.com/simple- rtmp -server/ srs /wiki/v2_CN_ Srs Lib rtmp )    1) srs - lib rtmp 导出为独立可以make的项目,生成.a静态库和.h头文件,以及生成了 srs - lib rtmp 的所有实例 [root@demo srs ]# https://github.com/os srs / srs /releases 2、编译(进入~/ srs -2.0-r4/trunk目录) ./configure --with- lib rtmp --without-ssl 3、启动 srs ./objs/ srs -c conf/ srs .conf tailf ./objs/ srs .log 4、编译s... 实时消息传输协议(Real-Time Messaging Protocol, RTMP )是由Adobe公司开发的一种网络协议,主要用于音视频内容的实时传输。在本章节中,我们将对 RTMP 协议的基础知识进行概括,并探讨其在实际应用中的重要性。 srs _ lib rtmp 库是围绕 RTMP 协议 实现 的一系列功能的开源代码库,最初作为 SRS (Simple- RTMP -Server)项目的一部分被开发。该库的设计初衷是提供一套完整的 RTMP 处理能力,以支持流媒体服务器的构建和维护。 接下来要 实现 connect,createStream,play,…,为了效率和篇幅,我们直接分析的 实现 . srs - lib rtmp 是从 srs 作者为 srs 服务 实现 的客户端库(The client lib rary srs - lib rtmp of SRS ),其实不止客户端,也 实现 了一个简单的server功能. 本文分析了 SRS RTMP 直播的 实现 ,覆盖了单机、Edge 集群、Origin 集群、Forward 等多种场景,详细讲解了单机场景下全流程处理,重点分析了 RTMP 直播 实现 所需的媒体处理。 瑞星微平台提供的Rkmedia只提供了rtsp的相关api,而 rtmp 相关的例程只出现在rkadk中并且这部分的代码特别复杂, lib rtmp 不支持 h264 裸流,所以我们引入了 srs - lib rtmp 。 本客户端基于我的博客:https://blog.csdn.net/linyibin_123/article/details/132107948 开发的播放器下新增 RTMP 推流 。 播放器可以支持软硬解码,截图、录像等功能,详细功能看该博客。本客户端支持读取文件解码后 推流 ,也支持拉取网络流解码后进行 推流 推流 地址为前面搭建的 RTMP 流媒体服务器, 推流 成功后,通过VLC播放器从 RTMP 服务器上拉流下来播放。