RTMP推流方案总结

news2024/12/25 0:59:22

由于项目需要 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://www.coloradmin.cn/o/95587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外卖订餐系统的设计与实现/点餐订餐系统

摘 要 随着外卖订餐在高校越来越普及,传统的电话订餐给顾客跟商家带来不方便,如何使订餐更快速,更方便已成为众多高校学生关注的问题了。本外卖订餐系统是针对高校商家进行具体的需求分析,采用JSP技术和采用SSM框架,MYSQL数据库…

QT制作窗口切换的小程序

QT制作窗口切换的小程序 前言:本次实验是在三个窗口之间自由切换,窗口中播放gif格式的动态图。 让我们先来看看使用到的主要的函数: 一、播放gif格式动态图的函数 QMovie *movie new QMovie("../form/1.gif"); // "../f…

软件测试人到30岁+,在岗位上工作如何破局?

最近一个学生也可以说是朋友,他遇到了一个让他困扰的职场难题,背景如下: 1)他们公司准备搞 安全测试 了,现在有人员培训的计划,所以全组有学习安全测试课程的安排。 2)他自己目前专职性能测试…

12月17日第壹简报,星期六,农历十一月廿四

12月17日第壹简报,星期六,农历十一月廿四1. 数字人民币试点再扩容:粤苏冀川4省全覆盖,新增济南、南宁、昆明等5座城市。2. 人民币兑美元中间价调降448点至6.9791,降幅创5月27日以来最大。3. 政府出面站台、鼓励居民团购…

DropBox系列-安卓DropBox介绍

前言: 作者本人负责公司的APM监控模块,因为工作的原因,对ANR,crash等流程研究的比较多,最近在打造APM监控平台的时候,顺带对DropBox的实现原理进行了一定的学习和研究,发现了一些妙用&#xff…

Dubbo 1 分布式系统中的相关概念 1.3 架构演进

Dubbo 【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】 1 分布式系统中的相关概念 文章目录Dubbo1 分布式系统中的相关概念1.3 架构演进1.3.1 架构演进1.3.2 架构演进 - 单体架构1.3.3 架构演进 - 垂直架构1.3.4 架构演进 - 分布式架构1.3.5 架构演进 - SOA…

SPDK块设备

SPDK视角每个App由多个子系统(subsystem)构成,同时每个子系统又包含多个模块(module),子系统和模块的注入都是可插拔的,通过相关的宏定义声明集成到SPDK组件容器里(其中子系统的注入可通过声明SPDK_SUBSYSTEM_REGISTER,块设备模块…

5G小基站行业市场空间将持续释放 2024年或将迎来建设高峰期

5G小基站行业上游包括硬件资源供应商、软件资源供应商、配套资源供应商;中游主体包括5G小基站设备厂商、5G小基站解决方案服务商;下游则主要是大型写字楼、购物中心、机场等。 数据来源:中国5G小基站市场发展趋势分析与未来前景研究报告&…

弥漫的烟圈-Abaqus涡环仿真与空气大炮

今天简单地讨论一下这个有趣的流体现象-烟圈,并使用Abaqus欧拉分析对它的形成过程进行仿真,揭示其中的力学奥秘。 烟圈 喷气圈的海豚 在流体力学里面,烟圈和水下气圈有个共同的名字,叫做Vortex Ring,即涡环或环形涡流…

腾讯云服务器选购新手教程(新版流程超级详细)

腾讯云服务器选购新手教程(新版流程超级详细),来详细说下腾讯云服务器购买流程图文详解及购买渠道说明。 腾讯云服务器购买流程 购买腾讯云服务器很简单,首先你需要注册一个腾讯云账号,使用微信或QQ注册即可,很简单。账号注册后&…

git clone 拉取远程仓库

1. git clone 拉取仓库 2. 以 HTTPS 方式拉取仓库 3. 以 SSH 方式拉取仓库 1. git clone 拉取仓库 拉取远程库的默认分支 git clone <repositories> 拉取远程库的指定分支 -b, --branch git clone -b <branch> <repositories> 将远程库拉取到指定目录 git c…

产品销量一直上不去,怎么办,试试这种模式?

裂变营销的本质是以存量带增量&#xff0c;让已有消费者帮你寻找潜在消费者&#xff0c;从而达到快速获客的目的。这种方法成本低、影响持久、效率高&#xff0c;已经成为传统企业转型不可或缺的重要战略&#xff1b;时至今日&#xff0c;许多传统企业&#xff0c;在引流方面碰…

【图像去噪】PM模型图像降噪【含Matlab源码 2107期】

⛄一、PM模型图像降噪简介 为了提高去除噪声和保留细节信息的算法的性能,Peroha等提出以热学中扩散方程式为基础的扩散算法即为PM模型。该模型主要是在经典各向异性扩散方dgi,j,t/dtdiv(d∇g)上提出将其中的扩散系数d用函数控制的扩散系数替代。PM模型为 其中,f(|∇gi,j,t|)是…

ISO 15765-2协议分享(三)—寻址方式详解

文章目录 前言一、Normal addressing二、Extended addressing三、Mixed addressing总结前言 2021年下半年的第一天,愿大家都安好。 对于自己的未来,做一个规划,不要让自己每天沉溺于肤浅信息带来的感官愉悦。 喜欢《沉思录》中一句话: 要学会深思,洞察事物之间的相互转…

轻量级聊天应用VoceChat

本文是应网友 猪猪侠的要求折腾的&#xff1b; 什么是 VoceChat &#xff1f; VoceChat 是一款支持独立部署的个人云社交媒体聊天服务。15MB 的大小可部署在任何的服务器上&#xff0c;部署简单&#xff0c;很少需要维护。前端可以内嵌到自己的网站下&#xff0c;数据完全由用户…

探花交友_第8章_搜附近(新版)

探花交友_第8章_搜附近(新版) 文章目录探花交友_第8章_搜附近(新版)1.1 需求分析需求说明数据库表1.2 探花推荐列表查询接口文档tanhua-modeltanhua-app-server**TanHuaController**TanHuaService配置文件tanhua-dubbo-interfacetanhua-dubbo-mongo1.3 左滑右滑接口文档tanhua-…

2022-前端实现电子签名(web、移动端)通用组件

前端实现电子签名&#xff08;web、移动端&#xff09;通用组件 前言 在现在的时代发展中&#xff0c;从以前的手写签名&#xff0c;逐渐衍生出了电子签名。电子签名和纸质手写签名一样具有法律效应。电子签名目前主要还是在需要个人确认的产品环节和司法类相关的产品上较多。…

可视化大数据分析系统

可视化大数据分析系统有很多&#xff0c;如果系统级都是收费的&#xff0c;如果大家想要了解可视化大数据分析系统&#xff0c;私信我就行。下面聊下5个常用的大数据可视化分析工具。 1、FineReport FineReport是一款纯Java编写的、集数据展示(报表)和数据录入(表单)功能于一…

Linux环境变量配置

在自定义安装软件的时候&#xff0c;经常需要配置环境变量&#xff0c;下面列举出各种对环境变量的配置方法。 下面所有例子的环境说明如下&#xff1a; 系统&#xff1a;Ubuntu 14.0 用户名&#xff1a;uusama 需要配置MySQL环境变量路径&#xff1a;/home/uusama/mysql/bi…

Servlet转发与重定向

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…