RTMP推流方案总结

article/2025/9/26 16:40:15

由于项目需要 RTMP 推送 H264 数据,在网上查找了下相关的方案,总结一下。

RTMP协议简介

在总结之前,我们先简单介绍一下 RTMP 协议。 RTMP(Real Time Messaging Protocol) 实时消息传送协议是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的私有协议。

它有三种变种:

1)工作在 TCP 之上的明文协议,使用端口 1935;

2)RTMPT 封装在 HTTP 请求之中,可穿越防火墙;

3)RTMPS 类似 RTMPT,但使用的是 HTTPS 连接;

RTMP 协议就像一个用来装数据包的容器,这些数据可以是 AMF 格式的数据,也可以是 FLV 中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。

更多协议的细节可以参见《rtmp specification 1.0》。

RTMP服务器

★文末名片可以免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

RTMP 服务器,现成的开源方案有以下几种推荐:

1. nignx

Nginx("engine x") 是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能的 Web 和反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。在高连接并发的情况下,Nginx 是 Apache 服务器不错的替代品。

我们这里使用的是 Nginx 的 rtmp 插件实现实时流推送,具体实现可以参考我的另一篇博客:Windows 搭建 nginx RTMP 服务器

2. srs

SRS(Simple RTMP Server) 是国人写的一款非常优秀的开源流媒体服务器软件,使用 C++ 开发,可用于直播/录播/视频客服等多种场景,其定位是运营级的互联网直播服务器集群。SRS 提供了丰富的接入方案将 RTMP 流接入 SRS,包括推送 RTMP 到 SRS、推送 RTSP/UDP/FLV 到 SRS、拉取流到 SRS。SRS 还支持将接入的 RTMP 流进行各种变换,譬如将 RTMP 流转码、流截图、转发给其他服务器、转封装成 HTTP-FLV 流、转封装成 HLS、转封装成 HDS、录制成 FLV。GitHub 源码链接为:https://github.com/ossrs/srs

3. crtmpserver c++

crtmpserver 是一个由 C++ 语言编写的开源的 RTMP 流媒体服务器,与其对应的商业产品自然是 Adobe 公司的 FMS。与 FMS 相比,从功能上来说crtmpserver 只能称为 FMS 的简化版本,其功能并没有 FMS 那么完善甚至是远远没有达到。其与 flash player 的兼容性自然也比不上官方的 FMS 了。但是 crtmpserver 提供了最常见的 RTMP 实现。作为开源的高性能 RTMP 流媒体服务器,不仅可以用在 x86 平台的 linux 服务器,windows 服务器,还可以被用在 arm 等嵌入式平台上。crtmpserver 的代码结构良好,类的继承体系清楚,代码效率高。是学习 RTMP 协议和服务器端编程的好例子。GitHub 源码链接为:https://github.com/shiretu/crtmpserver

crtmpserver 源码依赖 openssl,所以不管是在 Linux 还是 Windows 平台下,都需要先编译 openssl 库,具体编译请参考:crtmpserver系列(二):搭建简易流媒体直播系统

4. livego

Go(又称Golang,wiki 中文)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言(github),支持windows、linux、macOS等操作系统。

livego 是基于 go 语言的 rtmp 直播服务器。go 语言为服务器性能而生,开发效率远远高过 C/C++。GitHub 源码链接为:GitHub - gwuhaolin/livego: live video streaming server in golang

为什么基于golang?

go 在语言基本支持多核 CPU 均衡使用,支持海量轻量级线程,提高其并发量。当前开源的缺陷:

  • srs 只能运行在一个单核下,如果需要多核运行,只能启动多个 srs 监听不同的端口来提高并发量;

  • ngx-rtmp 启动多进程后,报文在多个进程内转发,需要二次开发,否则静态推送到多个子进程,效能消耗大;

go 在语言级别解决了上面多进程并发的问题。具体请参考:默默前行的livego--基于go语言的rtmp直播服务器

5. node-rtsp-rtmp-server

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。

node-rtsp-rtmp-server 是使用 Node.js 实现的 rtmp 服务器。GitHub 源码链接为:https://github.com/iizukanao/node-rtsp-rtmp-server

测试

测试的话下载个推流工具,建议使用大牛直播提供的推流工具,也可以使用 FFmpeg 推流。

RTMP推流器

1. librtmp

RTMPDump 软件包含一个基本的客户端:rtmpdump,一些示例服务器和一个用来提供对RTMP协议进行支持的库(libRTMP)。librtmp 使用的人非常多,但也比较老了,具体请参考:

H264视频通过RTMP直播

windows - librtmp推送H264的Demo下载

最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)

2. FFmpeg

FFmpeg 也能实现 rtmp 推流,因为内部集成了 librtmp,官方给出了 muxing.c 源代码,就是实现如何推流的例子。具体可以参考:

ffmpeg 代码实现rtmp推流到服务器

《最简单的基于FFmpeg的推流器(以推送RTMP为例)》

基于FFmpeg进行RTMP推流(一)

Windows远程桌面实现之五(FFMPEG实现桌面屏幕RTSP,RTMP推流及本地保存)

3. srs-librtmp

srs-librtmp 是 srs 提供的一个 rtmp 库,可以推送 H264 数据。本来打算使用 srs 来做 rtmp 推流器,但是 srs 只提供了 Linux 平台的 srs_librtmp.lib 静态库和 Demo,费了些功夫,修修改改成功编译了 Windows 下的 srs_librtmp.lib 静态库,但是添加进工程后,工程可以打开库,却识别不了所调用的 API,由于时间问题暂时放弃。

参考:

rtmp服务器以及rtmp推流/拉流/转发

作者:fengMisaka

★文末名片可以免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 


http://chatgpt.dhexx.cn/article/9A3GIs4j.shtml

相关文章

推流工具 OBS 使用指南

推流工具 OBS 使用指南 内容转载阿里云文档–第三方推流工具使用指南 OBS介绍 什么是OBS? Open Broadcaster Software 是一款好用的直播流媒体内容制作软件。 OBS使用是否收费? 不收费,这个程序和它的源代码都是免费的。 OBS都支持哪些…

rtmp推流和拉流

提前说明,文章所用主要摘自网络,本文只是整合。鉴于来源太多,不进行引用说明 NGINX 安装nginx及安装nginx模块 nginx下载地址 http://nginx.org/download/nginx-1.20.1.tar.gz nginx-rtmp模块 组件下载地址 https://github.91chifun.w…

使用软件实现直播推流

rtmp媒体服务器:这里使用srs :https://github.com/ossrs/srs 首先clone到本地,进入到trunk目录: git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure 最后执行:make 执行成功后,就…

基于FFmpeg进行rtsp推流及拉流(详细教程)

目录 1. 安装FFmpeg 1.1 Windows系统 1.2 Ubuntu 和 Debian 系统 1.3 CentOS 和 Fedora 系统 1.4 macOS系统 2. 安装rtsp-simple-server 3. FFmpeg推流 3.1 UDP推流 3.2 TCP推流 3.3 循环推流 4 拉流 4.1 ffplay/VLC拉流显示 4.2 FFmpeg拉流保存成视频 1. 安装FFm…

音视频直播推流和拉流到底是什么意思?

为什么直播现场的信息,用户通过手机或者网站就能很快的看到呢?为什么有时候网络不稳定,直播效果会有延迟呢?现场的视频信号又是如何传到网络呢? 这些所有问题的产生,都离不开视频直播中常说的两个词&#…

音视频流媒体-推流与拉流简介

一、概念 话不多说,先了解概念,再看示意图更直观: 1.1 推流 推流:将直播的内容推送至服务器的过程。即指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高&a…

不用第三方写一个简单的推流软件

https://github.com/iOSSinger/SGLivingPublisher 不用第三方写一个简单的推流软件 6 commits 1 branch 0 releases 1 contributor Objective-C 100.0% Objective-C Clone or download Find file Branch: master New pull request Latest commit 122566b on 16 Feb iOSS…

RTMP 利用第三方软件实现数据推流与客户端播放

服务器的搭建建 Red5 搭建基于RTMP协议的流媒体服务器 1.软件 数据推流软件 flash_media_live_encoder_3.2 客户端播放软件 vlc-2.1.5-win32.1406534096 2.安装软件 直接双击安装即可 3.数据推流 使用flash encoder软件 设置服务器的URL rtmp://localhos…

视频直播推流攻略(整理的各大平台推流界面)

如果我要做一场高端大气的直播活动,需要用高清摄像机拍摄画面,需要接入无人机的高空画面,需要在直播中插入多个镜头,甚至需要把电脑桌面共享到直播画面中...... 该如何将这类现场信号采集并整合起来传输到网络呢? 这个…

推流工具OBS 支持webrtc推流

OBS 是一款好用的直播流媒体内容制作软件,为用户提供了视频、文本、图像等的捕获录制功能,OBS 界面简洁并专业,功能强大。OBS 程序和其源代码都是免费提供给大家使用,版本更新一直比较活跃,支持 OS X、Windows、Linux …

直播-拉流和推流概述

拉流(播放) 根据协议类型(如RTMP、RTP、RTSP、HTTP等),与服务器建立连接并接收数据; 解析二进制数据,从中找到相关流信息;根据不同的封装格式(如FLV、TS)解…

【流媒体】推流与拉流简介

本文目录 一、概念 1.1 推流 1.2 拉流 二、示意图 三、RTMP传输协议 四、流媒体协议与格式 一、概念 话不多说,先了解概念,再看示意图更直观: 1.1 推流 推流:将直播的内容推送至服务器的过程。即指的是把采集阶段封包好的…

OBS推流直播软件安装教程

OBS推流直播软件安装教程 一、安装推流软件 1.双击运行 OBS-Studio-21.1-Full-Installer.exe 安装包程序 2.点击 Next 3.点击I Agree (不知道为啥显示图片了 可以复制里面的连接到浏览器打开) 4.点击Next 5.点击Install 6.点击Finish&#xff0…

四款好用的免费直播编码推流软件

现代生活已经离不开互联网,离不开软件了。 这说法毫不夸张。 比如手机上各种 APP 眼花缭乱 ,各种行业, 各种功能, 各种 Logo, 各种的各种。 没有良好的整理力,是真 的不好意思让别人看到啊。 这些功能各异的 APP 程序大多数是免费 APP。今天我们来谈谈…

Android手机屏幕RTMP推流工具

Android手机屏幕RTMP推流工具是基于ffmpegopencv开发的C(eclipse、androidstudio)程序,是一款可以将安卓手机屏幕上的任何内容推送到任意一款rtmp服务器上的工具,不仅可以分享手机屏幕内容,还可以分享手机上正在播放的…

三款免费的直播推流软件介绍

三款免费的直播推流软件介绍: 1. Adobe Flash Media Encoder 2. Open Broadcaster Software 3. iAVcast 1)Flash Media Live Encoder 3.2 由著名的Adobe公司出品,值得信赖,Adobe好长时间已经停止更新了&…

tensorflow中的sess.run()

1.feed_dict feed_dict的作用是给使用placeholder创建出来的tensor赋值,feed使用一个值临时替换一个op的输出结果。 2.sess.run() 构建完图后,需要在一个会话中启动图,启动的第一步是创建一个Session对象。在执行sess.run()时,te…

tensorflow sess.run()

函数参数run( fetches, feed_dictNone, optionsNone, run_metadataNone) feed_dict参数的作用是替换图中的某个tensor的值。例如: a tf.add(2, 5) b tf.multiply(a, 3) with tf.Session() as sess: sess.run(b) 21 replace_dict {a: 1…

sess.run()自我理解

import tensorflow as tf a tf.constant([[1,2],[3,4]]) print(a) matrix2 tf.placeholder(float32,[2,2]) matrix1 matrix2#浅拷贝 sess tf.Session() print(sess.run(a)) print(a) asess.run(a) print(a) print(sess.run(matrix2 ,feed_dict{matrix2:a})) #只要是sess.…

Oracle视图学习DBA_HIST_ACTIVE_SESS_HISTORY

dba_hist_active_sess_history:这个视图是用来生成 ASH report 的, 但是 ASH report 并没有充分的利用这个视图的强 大之处,我们通过分析这个视图的详细数据,往往可以找到问题发生的原因. 可以从宏观和微观两个维度来分析这个视图(用 11gR2 的 dba_hist_active_sess_history 做…