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
服务器上拉流下来播放。