深入理解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,只使用手机系统的硬编码器,后续还在不断的优化和迭代,欢迎大家体验使用,一起参与维护.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702707.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.Mongodb 复制集RS

MongoDB复制集是Mongodb提供的一种高可用和数据冗余的解决方案,复制集由多个MongoDB服务器组成,其中一个服务器作为主节点(Primary),处理所有写操作,而其他服务器作为从节点(Secondary&#xff…

超越 Transformer开启高效开放语言模型的新篇章

在人工智能快速发展的今天,对于高效且性能卓越的语言模型的追求,促使谷歌DeepMind团队开发出了RecurrentGemma这一突破性模型。这款新型模型在论文《RecurrentGemma:超越Transformers的高效开放语言模型》中得到了详细介绍,它通过…

【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 标准对话框 | 文件对话框QFileDialog 文章编号:Q…

闪烁圆点加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>闪烁圆点加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

正在进行时!西有毕加索 东有郭泰来 —— 郭泰来现代艺术大展开幕了

仅10天时间&#xff01;关于郭泰来先生及其作品已经在包括人民日报等央媒在内的2000加媒体竞相报道&#xff0c;印象中在美术界应该是头一次&#xff01;为何有这么大的热度&#xff0c;当然还是因为他这个人和他的作品。现在&#xff0c;见真章的时候到了&#xff0c;由北京国…

文心一言开通后吐槽下

如果你想购买,不推荐,速度慢,然后很多情况下真的不如gpt3.5 总的来说,不推荐使用和续费 光是生成速度就落后一大截了.........亏我还开了会员,操蛋速度慢,还会出现火爆使用 生成速度太慢了 大概2~3分钟左右才处理好 切出网页标签还不能生成了! 这一点真无语,必须要一直看着……

SpringBoot调用WebService的实践

作者所在公司的系统间的信息交互是通过webservice完成。如&#xff1a;MES与SAP的交互&#xff0c;MES与WMS的交换&#xff0c;MES与SRM的交互&#xff0c;MES与IOT的交互等。 MES是用.NET VS2008 C#写的&#xff0c;调用webservice很简单&#xff0c;这里不再赘述。如有想了解…

PGFed: Personalize Each Client’s Global Objective for Federated Learning

ICCV-2023, 文章提出显式隐式的概念,作者通过实验发现显式比隐式的效果好,显式方式通过直接与多个客户的经验风险互动来更新模型,并用泰勒展开式降为 O ( N ) O(N) O(N)通讯成本。 文章地址:arxiv code: 作者开源 贡献 1.我们发现个性化 FL 算法的显式性赋予了其更强的…

LeetCode1268搜索推荐系统

题目描述 给你一个产品数组 products 和一个字符串 searchWord &#xff0c;products 数组中每个产品都是一个字符串。请你设计一个推荐系统&#xff0c;在依次输入单词 searchWord 的每一个字母后&#xff0c;推荐 products 数组中前缀与 searchWord 相同的最多三个产品。如果…

【网络编程】套接字类型与协议设置

协议&#xff1a;计算机对话的通信规则&#xff0c;简而言之是为了完成数据交换而定好的约定。 #include<sys/socket.h> int socket(int domain, int type,int protocol); //domian使用的协议族信息&#xff0c;type传输类型&#xff0c;protocol计算机间通信使用的协议…

Xinstall:解决App安装跳转难题,让你的用户流畅体验不再受阻

在互联网流量红利逐渐衰退的今天&#xff0c;App推广和运营面临着前所未有的挑战。如何确保在多变的互联网环境下&#xff0c;迅速搭建起能时刻满足用户需求的运营体系&#xff0c;已经成为众多企业急待解决的问题。今天&#xff0c;我们就来探讨一下如何通过Xinstall的安装跳转…

在仓库新建分支之后,Vscode里面看不到

问题描述 在仓库新建了分支 但是在Vscode里面看不到这个新建的分支 解决 参考文章&#xff1a;http://t.csdnimg.cn/V92a3 在终端输入&#xff1a;git remote update origin --prune 命令解释 git remote update origin --prune 是一个 Git 命令&#xff0c;用于更新远程…

单目标应用:基于红嘴蓝鹊优化器RBMO的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、红嘴蓝鹊优化器求解微电网 2.1算法简介 红嘴蓝鹊优化器&#xff08;R…

本地生活进入下半场,美团的“低价”牌怎么打?

文 | 螳螂观察 作者 | 易不二 近日&#xff0c;美团交出了一份营收利润双增长的一季报。 财报显示&#xff0c;2024年第一季度&#xff0c;美团实现营收733亿&#xff0c;同比增长25%&#xff1b;净利润54亿元&#xff0c;同比增长59.9%&#xff1b;调整后净利润为74.88亿元…

【日记】分墨器大道至简,还挺好用(342 字)

正文 今天没见到任何客户&#xff0c;在柜台坐着玩手机玩了一天。倒是看了许多书&#xff0c;虽说也没看多少就是了。此外给植物换了水&#xff0c;同步了下文章&#xff0c;整理了一下数据什么的。 因为钢笔都没墨水了&#xff0c;去拿新墨水时忽然看见商家送的分墨套装&#…

MySQL-----JOIN语句之左连接、右连接

接着上文我们将基于学生&#xff0c;课程&#xff0c;考试信息三个表对内连接的总结&#xff0c;我们再来对左右连接进行一个总结&#xff0c;三个表结构以及表内数据如下图所示&#xff1a; 左连接 为了便于展示左右连接的区别&#xff0c;我们在student表里插入了一位成员…

大一学生分享哈希表

数据结构与算法&#xff0c;众妙之门&#xff0c;魅力无穷 ---同行者联盟 哈希表 哈希表使用场景与详细介绍 需求&#xff1a; “三分钟内&#xff0c;我要那个女生的全部资料”&#xff0c;这是我们在霸道总裁爱上我的电视剧中常听到的话…

CUDA、CUDNN、Torch的配置

文章目录 一、 配置CUDA1.CUDA下载2.CUDA安装3.CUDA配置环境4.CUDA是否配置成功 三、 配置CUDNN四、配置torch1.创建Python 3.8环境并激活2.下载torch-GPU版本 一、 配置CUDA WinR打开命令行&#xff0c;输入cmd&#xff0c;在终端输入&#xff1a;nvidia-smi。 查看本机的GPU…

海洋CMS /js/player/dmplayer/dmku/ SQL注入漏洞复现(CVE-2024-29275)

0x01 产品简介 海洋CMS是一套专为不同需求的站长而设计的内容管理系统&#xff0c;灵活、方便、人性化设计、简单易用是最大的特色&#xff0c;可快速建立一个海量内容的专业网站。海洋CMS基于PHPMySql技术开发&#xff0c;完全开源免费 、无任何加密代码。 0x02 漏洞概述 海…