当前位置: 首页 > news >正文

深入理解rtmp(一)之开发环境搭建

深入理解rtmp(一)之开发环境搭建

手机直播在15年的时候突然火起来,随着花椒,映客等出现,直播一下就出现在了风口,各个公司针对直播的战斗迅速打响,战斗过程比较短暂,随着许多公司的退出和死去,手机直播行业趋于稳定,直播服务时长也被传统的CDN厂商牢牢占据,后面大家又把精力投入到互动直播上面,当时一下对手机直播失去了信心.现在随着5G时代的到来,VR技术的兴起,就像15年前的短视频,在17年以后又开始发力一样,直播可能还会迎来它的第二春.趁着有点时间,准备再把直播领域的东西捡起来,从协议实现到编码到采集,逐渐深入并分享出来.

工欲善其事必先利其器,今天先搭建一套完整的服务系统,从采集推流到服务处理到播放端.

先来搭建服务端

RTMP服务器搭建

常用的rtmp服务器有:AMS(FMS),wowza,Red5,SRS,crtmpserver,nginx.

  • RTMP是Real Time Message Protocol(实时信息传输协议)的缩写,是由Adobe公司提出的一种应用层协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题.Flash Media Server (简称FMS),后更名为Adobe Flash Media Server (简称AMS)。它是较早(2002年)做流媒体服务器产品的,原公司是Macromedia,后来被Adobe收购了,它是流视频和实时通信领域业界领先的解决方案,该产品可以快速搭建起一套流媒体直播、点播服务器。AMS可以说是rtmp的官方实现服务.官网Adobe Media Server family,但是它是收费的.可以使用,最开始使用AMS搭建过服务,可以参考FMS教程自己尝试搭建.
  • wowza全名是Wowza Streaming Engine,是一款非常优秀的流媒体服务器产品。也算是除了FMS产品之外的一个老版子产品,产品发布于2007年,他在HLS(m3u8)分发方面是非常不错的。从wowza2.0到现在的wowza4.5,都曾关注和使用过他们的产品,总体来说性价比还是蛮高的。同AMS一样,它也是需要付费的产品.官网Wowza Live Stream Software,同样参考RED5教程 尝试自己搭建
  • Red5:免费开源的是它最大的优点,也因此有很多用户在使用它们的产品,然后不足在于占用服务器资源较高。官网Red5 Media Server
  • crtmpserver又称rtmpd是Evostream Media Server(www.evostream.com)的社区版本采用GPLV3授权,由 C/C++开发的一个高性能的RTMP流媒体服务器,可以实现直播与点播功能多终端支持功能,在特定情况下是FMS的良好替代品。支持RTMP的一堆协议 (RTMP,RTMPE, RTMPS, RTMPT, RTMPTE),如果你不想用RED5的话它也是一个很好的选择。github地址:https://github.com/j0sh/crtmpserver ,已经有八九年没有维护了
  • Nginx-rtmp:是作为nginx的一个模块部署,官网地址nginx-rtmp,github地址nginx-rtmp-module
  • SRS(Simple Rtmp Server)定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码,这是该产品自己官方的介绍。值得一说的是,前面几个产品都是国外的,而这个作者是国内的,目前作者在阿里.

综合上面描述,对于我们选型最好的是SRS与Nginx-rtmp-module,关于这两种开源实现,SRS作者成立2020/01/19刚做了fork对比:
在这里插入图片描述

SRS有略微优势,关于性能对比可以参考srs之与nginx-rtmp性能对比,这里我们选择SRS作为RTMP服务.作者提供了docker环境,我们根据官网在mac上搭建我们的SRS服务:

Step1:获取srs:

git clone https://github.com/ossrs/srs &&
cd srs/trunk

下载太慢可以选择国内镜像:git clone https://gitee.com/winlinvip/srs.oschina.git

Step 2: 配置docker环境

编译方式选择使用docker,作者提供了docker,可直接使用:

docker pull ossrs/srs:dev

在srs目录下启动docker:

docker run -it -v `pwd`:/tmp/srs -w /tmp/srs/trunk -p 1935:1935 \-p 1985:1985 -p 8080:8080 -p 8085:8085 ossrs/srs:dev bash

Note: Recommend to use AliyunCR registry.cn-hangzhou.aliyuncs.com/ossrs/srs:dev, because it’s much faster.

可以使用如下方式在新窗口进入该docker容器:

dockerID=`docker ps --format "{{.ID}} {{.Image}}" |grep 'ossrs/srs:dev' |awk '{print $1}'` &&
docker exec -it $dockerID bash

Step 3: 编译srs

在docker中编译

./configure && make

Step 4: 运行srs

./objs/srs -c conf/srs.conf

Step 5: docker启用gdb调试

To run docker with --privileged for GDB, or it fail for error Cannot create process: Operation not permitted.

推流端

服务端搭建好了,我们接下来就是把音视频流推送到服务器.在PC上我们最常用的推流程序是ffmpeg与OBS:

ffmpeg命令方式推流

在mac上我们可以通过brew install ffmpeg安装ffmpeg,安装好后准备一个待推流视频,执行下面命令:

ffmpeg -re -i ./kobe.mp4 -vcodec copy -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/livestream

其中:

  • -re 按照帧率发送;如果不加,手册里说的是发送as fast as possible
  • -i ./kobe.mp4 推送的是当前目录下的kobe.mp4文件
  • -vcodec copy 视频编码为保持原始kobe.mp4视频编码,我这个文件是h264
  • -acodec copy 音频编码为保持原始kobe.mp4音频编码,我这个文件是aac
  • -f flv 封装格式是flv
  • -y rtmp://127.0.0.1:1935/live/livestream 直接写入到输出文件,这里面是rtmp的服务地址

执行效果:
在这里插入图片描述在这里插入图片描述

obs

直接安装obs后:
在这里插入图片描述

点击设置->串流,配置rtmp地址:
在这里插入图片描述

确定后点击"开始串流"就可以将我们的摄像头画面推送的rtmp服务器.

其它

在移动端有一些其它的实现的推流器,但是都没有PC上面的两款方面,后面我们自己实现一个Android/iOS的推流程序.

播放器

PC端最常用最好用的rtmp播放器莫过于ffplay与vlc,虽然他们有延迟高等缺点,但是不妨碍我们平时的开发调试:

ffplay

安装ffmpeg后自带ffplay,直接ffplay rtmp://127.0.0.1:1935/live/livestream就可以正式看片了,直接上效果:
在这里插入图片描述

vlc

vlc更简单了,打开vlc, 按下cmd + n,选择Network输入我们的直播地址就可以开始了:
在这里插入图片描述

其他

在移动端最流程的莫过于ijkplayer,github地址:https://github.com/bilibili/ijkplayer, ijkplayer基于ffmpeg,Features:
Common

  • remove rarely used ffmpeg components to reduce binary size config/module-lite.sh

  • workaround for some buggy online video.
    Android

  • platform: API 9~23

  • cpu: ARMv7a, ARM64v8a, x86 (ARMv5 is not tested on real devices)

  • api: MediaPlayer-like

  • video-output: NativeWindow, OpenGL ES 2.0

  • audio-output: AudioTrack, OpenSL ES

  • hw-decoder: MediaCodec (API 16+, Android 4.1+)

  • alternative-backend: android.media.MediaPlayer, ExoPlayer
    iOS

  • platform: iOS 7.0~10.2.x

  • cpu: armv7, arm64, i386, x86_64, (armv7s is obselete)

  • api: MediaPlayer.framework-like

  • video-output: OpenGL ES 2.0

  • audio-output: AudioQueue, AudioUnit

  • hw-decoder: VideoToolbox (iOS 8+)

  • alternative-backend: AVFoundation.Framework.AVPlayer, MediaPlayer.Framework.MPMoviePlayerControlelr (obselete since iOS 8)

考虑到ffmpeg的复杂性和庞大的体积,我自己开发了oarplayer,github地址https://github.com/qingkouwei/oarplayer,没有使用ffmpeg,只使用手机系统的硬编码器,后续还在不断的优化和迭代,欢迎大家体验使用,一起参与维护.

相关文章:

深入理解rtmp(一)之开发环境搭建

深入理解rtmp(一)之开发环境搭建 手机直播在15年的时候突然火起来,随着花椒,映客等出现,直播一下就出现在了风口,各个公司针对直播的战斗迅速打响,战斗过程比较短暂,随着许多公司的退出和死去,手机直播行业趋于稳定,直播服务时长也被传统的CDN厂商牢牢占据,后面大家又把精力投…...

java常用面试基础题

&与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件…...

互联网摸鱼日报(2024-06-11)

互联网摸鱼日报(2024-06-11) 36氪新闻 雅诗兰黛,胆子也太大了 苹果WWDC终极前瞻:5大看点20大AI新功能,库克不能输的一战 瑞士清洁科技公司Enerdrape开发预制地热板,回收城市地下空间的浅层地热能和废热用于建筑物制热或制冷 | …...

中介子方程十二

X$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXα…...

SLT简介【简单介绍SLT】

SLT简介 在c的学习当中STL的学习是一个很重要的一环,但是STL又是一个庞大的章节,因此这里我们先简单介绍一下STL,有助于后面我们对STL的学习,这里就是做一个简单的介绍,并无干货。 1.什么是STL STL(standard templa…...

vue实现pdf下载——html2canvas

html2canvas 官方文档https://html2canvas.hertzen.com/getting-started html2canvas 的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者PDF文件。 1. 安装插件 npm install html2canvas jspdf --save 2.使用(页面已经…...

安装docker+mysql的一些坑

yum -y install docker 提示missing signature 参考这里 https://www.8a.hk/news/content/8235.html 卸载旧的docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装…...

React Native采集数据离线存储、网络状态监控、加密上传、鉴权

在无网络环境下进行数据采集并在有网络时上传至服务器,同时确保数据的鉴权和加密,这一需求需要考虑多方面的实现细节。无论您选择原生开发还是使用React Native(甚至Expo),以下是如何实现这一需求的具体步骤和建议。 …...

网络数据库后端相关面试题(其三)

18, 传输控制协议tcp和用户数据报协议udp有哪些区别 第一,tcp是面向字节流的,基本的传输单位是tcp报文段;而udp是面向报文的,基本传输单位是用户数据报。 第二, tcp注重安全可靠性,连接双方在…...

Hadoop之HDFS分布式文件系统

HDFS简介 Hadoop Distributed File System (HDFS): HDFS 是 Hadoop 的分布式文件系统,它设计用于存储大量数据,并提供 高吞吐率的数据访问,通过将数据分块存储在多个节点上,实现数据的冗余存储和容错。 HDFS重要概念 HDFS 通过统一的命名空间目录树来定位文件; 另外,它…...

插入删除单链表指定结点-偷天换日法

王道说下面的代码有BUG,比如当删除的结点p在最后一个元素时,p->nextNULL; So *q NULL; q->data就是错误的,我认为加个判断就行 加个判断即可 /*看着是删除q了,从结果上看就是把p删除了 偷天换日法*/ bool DeleteNode(LNod…...

MybatisPlus代码生成器使用案例

针对数据库中的实体类表,自动生成相关的pojo类,mapper,service等 1. Get-Started 基于mybatisplus,idea下载mybatisplus插件 sql文件 /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8 …...

数学公式编辑器(前端预研)

数学公式输入wangeditor: vue2使用wangeditor实现数学公式和富文本编辑器 mathjax文档:MathJax: 让前端支持数学公式 mathjax识别数学公式vue中使用mathjax识别latex数学公式 数学公式编辑器:(少) https://github.com…...

架构设计-如何安全地传输密码

java web 项目中经常会遇到登录或注册的场景,如果查看浏览器的 network 网络请求时,用户的密码以明文方式传输,会造成很多安全隐患,这就涉及到密码如何安全传输的问题。 数据加密的重要性不言而喻,通用的加密技术有 哈希散列、对称加密、非对称加密。 哈希散列 哈希散列是…...

【库】nprogress 顶部进度条

yarn add nprogress router文件 前置路由添加启动 后置路由添加关闭 router.beforeEach((to, from, next) > { NProgress.start() next() }) router.afterEach(() > { NProgress.done() }) App.vue 文件 引入样式 <script setup> import "nprogress/npro…...

15、架构-可靠通讯之服务安全

概述 我们已经了解了与具体架构形式无关的业界主流安全概念和技术标准&#xff08;如TLS、JWT、OAuth 2等概念&#xff09;&#xff0c;在上一章节探讨了与微服务运作特点相适应的零信任安全模型。在本节中&#xff0c;我们将从实践和编码的角度出发&#xff0c;介绍在微服务时…...

web刷题记录(5)

[羊城杯 2020]easycon 进来以后就是一个默认测试页面&#xff0c; 在这种默认界面里&#xff0c;我觉得一般不会有什么注入点之类的&#xff0c;所以这里先选择用御剑扫扫目录看看有没有什么存在关键信息的页面 扫了一半发现&#xff0c;很多都是和index.php文件有关&#xff0…...

Redis高并发高可用

1. 复制机制 在分布式系统中&#xff0c;为了解决单点问题&#xff0c;通常会将数据复制多个副本部署到其他机器&#xff0c;以满足故障恢复和负载均衡等需求。Redis提供了复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础&#xff0c;后面的…...

【前端取不到cookie的的原因】http-only

某条cookie有http-only属性时&#xff0c;下面两种方法都取不到&#xff0c;还是改需求吧&#xff0c;别取了 1、 npm install js-cookie --save import Cookies from js-cookie let cookieValue Cookies.get(name)2、document.cookie...

推荐 2 个 火火火火 的开源项目

推荐两个开源项目&#xff0c;一个能让你的小爱音响更聪明。另外一个可以让你简单的下载互联网网站上的视频、文件、富文本内容。 01 MiGPT: 让你的小爱音响更聪明 让你的小爱音箱更聪明&#xff0c;提高智能家居的互动性和个性化体验的开源利器&#xff01; MiGPT 将 ChatGPT …...

从237ms到39ms:DeepSeek-Coder推理首token时延压缩术(含完整torch.compile+Triton内核patch)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek-Coder推理首token时延压缩的工程意义与瓶颈全景 首token时延&#xff08;Time to First Token, TTFT&#xff09;是衡量代码大模型在线服务响应能力的关键SLA指标。在IDE插件、实时结对编程、…...

智慧医疗颈椎椎骨识别分割数据集labelme格式1054张6类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数)&#xff1a;1054标注数量(json文件个数)&#xff1a;1054标注类别数&#xff1a;6标注类别名称:["C2","C3","C4","C…...

AI时代公众号生存指南(ChatGPT自动化运营全链路拆解)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;AI时代公众号的生存逻辑与定位重构 在生成式AI深度渗透内容生态的当下&#xff0c;公众号已从“流量分发管道”蜕变为“人机协同的认知接口”。其生存逻辑不再依赖单一的推送频次或标题党技巧&#xff0c;而取…...

破解行业共性管控难题,推动矿山安全体系迭代升级 ——基于视频孪生无感定位的矿山安全体系革新技术方案

破解行业共性管控难题&#xff0c;推动矿山安全体系迭代升级——基于视频孪生无感定位的矿山安全体系革新技术方案一、方案引言国内煤炭矿山长期在人员监管、灾害应急、隐患溯源、空间管控层面沉淀诸多共性难题&#xff0c;佩戴管控流于形式、监测数据失真失实、灾变监测体系快…...

【行业首发】DeepSeek V3 MoE稀疏激活机制详解:如何用1/3显存跑满128K上下文?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek V3 MoE稀疏激活机制的行业意义与定位 DeepSeek V3 采用混合专家&#xff08;Mixture of Experts, MoE&#xff09;架构&#xff0c;其核心突破在于实现了动态、细粒度的稀疏激活——每次前向传…...

仅限前500名开发者获取:ChatGPT+Tableau自动化连接器私有部署包(含OAuth2.0审计日志模块)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;ChatGPT数据可视化建议 在利用ChatGPT辅助数据分析与可视化时&#xff0c;关键在于将模型生成的结构化洞察高效映射到可交互、可解释的图表中。以下实践建议聚焦于提升输出质量与工程落地性。 优先选择语义明…...

张量网络机器学习:从平均风险下界看量子模型泛化极限

1. 项目概述&#xff1a;当张量网络遇见机器学习如果你和我一样&#xff0c;既对量子多体物理中的张量网络着迷&#xff0c;又对机器学习模型的泛化能力充满好奇&#xff0c;那么“张量网络机器学习模型平均风险的理论分析”这个课题&#xff0c;无疑是一个能将两者完美结合的宝…...

怎样轻松突破微信网页版限制:wechat-need-web开源插件实用指南

怎样轻松突破微信网页版限制&#xff1a;wechat-need-web开源插件实用指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 微信作为日常沟通的重要工具…...

想知道你的AI提示词到底用了多少Token?这个可视化工具告诉你答案

想知道你的AI提示词到底用了多少Token&#xff1f;这个可视化工具告诉你答案 【免费下载链接】tiktokenizer Online playground for OpenAPI tokenizers 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokenizer 在构建AI应用时&#xff0c;你是否经常遇到这样的困惑…...

qmc-decoder深度解析:高效解密QQ音乐加密格式的技术架构与实践

qmc-decoder深度解析&#xff1a;高效解密QQ音乐加密格式的技术架构与实践 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 在数字音乐版权保护的背景下&#xff0c;QQ音乐采…...