本文详细介绍了如何从源代码编译SRS服务器的RTMP库srs-librtmp,并在Linux和Windows环境下使用它进行RTMP连接、握手、应用连接及流发布等操作,提供了一个简单的示例程序。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

1、RTMP握手协议

查看链接 : https://github.com/ossrs/srs/wiki/v1_CN_RTMPHandshake

2、下载srs-master.zip版本

下载地址: https://github.com/ossrs/srs/tree/master

3、SRS可以直接导出一个srs-librtmp的project,编译成.h和.a使用。或者导出为.h和.cpp,一个大文件,具体的过程如下:

3.1、  SRS在2.0提供了导出srs-librtmp的编译选项,可以将srs-librtmp单独导出为project,单独编译生成.h和.a,方便在linux和windows平台编译。

(1)下载srs后,解压,进入目录

(2)SRS将srs-librtmp导出为独立可以make的项目,生成.a静态库和.h头文件,以及生成了srs-librtmp的所有实例。

dir=/home/test/srs-librtmp &&
rm -rf $dir &&
./configure --export-librtmp-project=$dir &&
cd $dir && make &&
./objs/research/librtmp/srs_play rtmp://ossrs.net/live/livestream
//执行该命令在相应的目录
//dir 为自己定义,生成的目录

(3)结果

3.2 直接导出为一个文件,提供了简单的使用实例,运行实例

(1)操作命令:

dir=/home/TEST/srs-librtmp &&
rm -rf $dir &&
./configure --export-librtmp-single=$dir &&
cd $dir && gcc example.c srs_librtmp.cpp -g -O0 -lstdc++ -o example && 
strip example && ./example
//example 为一个简单的运行demo

(2)结果

4.Windows下编译srs-librtmp

srs-librtmp可以只依赖于c++和socket,可以在windows下编译。

先使用SRS导出srs-librtmp(srs_librtmp.cpp和  srs_librtmp.h)如结果(2),将.h和cpp添加在自己的工程,然后在vs中编译,修改遇到的编译错误问题即可。

5.Windows下测试

#include <stdio.h>
#include "srs_librtmp.h"
int main(int argc, char** argv)
	srs_rtmp_t rtmp;
	printf("Example for srs-librtmp\n");
	printf("SRS(ossrs) client librtmp library.\n");
	printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
	rtmp = srs_rtmp_create("rtmp://192.168.151.46:1935/live/livestream");
	srs_human_trace("create rtmp success");
	int avx_success = -1;
	avx_success = srs_rtmp_handshake(rtmp);
	printf("srs_rtmp_handshake ,avx_success = %d\n", avx_success);
	if (avx_success != 0)
		srs_human_trace("1 ortmp simple handshake fail");
	srs_human_trace("1 ortmp simple handshake success");
	avx_success = srs_rtmp_connect_app(rtmp);
	if (avx_success != 0)
		srs_human_trace("2 ortmp connect vhost/app fail");
	srs_human_trace("2 ortmp connect vhost/app success");
	avx_success = srs_rtmp_publish_stream(rtmp);
	if (avx_success != 0)
		srs_human_trace("3 ortmp publish stream fail");
	srs_human_trace("3 ortmp publish stream success");
	while (1)
	     //send data
	srs_rtmp_destroy(rtmp);
	return 0;
				
众所周知的原因原生的RTMP只支持H264 并不支持H265的传输,之前的项目基于海思3531DV200平台的多路输入 多路输出 基于FFMpeg 拉RTSP的流 然后通过海思硬件解码然后在编码成较小的分辨率 通过RTMP推流到服务器端 项目已经基本结束。 然后领导 要求要实现RTMP H265的实现。从上周五2021.12.03 接到这个任务,到今天12.10正好一星期 已经基本上实现。中间穿插了一些其他的杂事。下面来说说这个过程吧 。 之前测试的都是3531拉流推流 到Nginx ...
首先要感谢winlin写出这么精简的东西 先说说,我是怎么用它的: 1.按照wiki上说的(https://github.com/simple-rtmp-server/srs/wiki/v2_CN_SrsLibrtmp)    1)srs-librtmp导出为独立可以make的项目,生成.a静态库和.h头文件,以及生成了srs-librtmp的所有实例 [root@demo srs]#
srs-librtmp可以直接推送H264格式的rtmp数据流,所以可以将海思HI3516通过VENC编码后的H264裸流数据直接通过srs-librtmp发送到阿里直播平台。 这里需要注意的是srs-librtmp流地址的拼接,可以参考https://github.com/ossrs/srs/wiki/v3_CN_RtmpUrlVhost 阿里直播平台地址格式一般为: url+appName+S...
SRS是一个简单高效的实时视频服务器,支持RTMP/,等多种格式。工作用用到 SRS 服务,本文是我在学习过程中的学习笔记。 要向开始搭建流媒体服务,基本分三个步骤: 1、启动流媒体服务(即SRS) 2、启动推流,即 流媒体视频,影音资料的来源 3、播放流媒体,即 用户端,通过 播放器或者 浏览器看视频。 由此理解到 “SRS 流媒体服务到底做了什么事?” 答:视频的输入 ...