【Java】Red5服务器搭建(实现在线直播,流媒体视频播放)

article/2025/10/30 8:47:22

为什么80%的码农都做不了架构师?>>> hot3.png

引言

流媒体文件是目前非常流行的网络媒体格式之一,这种文件允许用户一边下载一边播放,从而大大减少了用户等待播放的时间。另外通过网络播放流媒体文件时,文件本身不会在本地磁盘中存储,这样就节省了大量的磁盘空间开销。正是这些优点,使得流媒体文件被广泛应用于网络播放。

流媒体服务器是通过建立发布点来发布流媒体内容和管理用户连接的。流媒体服务器能够发布从视频采集卡或摄像机等设备中传来的实况流,也可以发布事先存储的流媒体文件,并且发布实况流和流媒体文件的结合体。一个媒体流可以由一个媒体文件构成,也可以由多个媒体文件组合而成,还可以由一个媒体文件目录组成。

Flash Media Server,简称 FMS,是 Flash 大家庭里的一员,被称为是目前开发 Web 音视频应用程序(比如,视频聊天室、视频会议系统、播客系统、音视频留言等等)的最方便最快捷的解决方案。也在 web 应用程序开发上有着越来越广泛的应用。当然 FMS 这种优良功能并不是免费提供给广大用户的,几千美金每个点的价格让很多开发人员望而却步。于是,大家开始尝试寻找一种更合适的解决方案,开源的 Red5 便成为了人们的新宠。

Red5 是一个采用 Java 开发的开源的 Flash 流媒体服务器,功能上与 FMS 类似。它支持:把音频(MP3)和视频(FLV)转换成播放流;录制客户端播放流(只支持 FLV);共享对象;现场直播流发布;远程调用。Red5 使用 RSTP 作为流媒体传输协议,包括在线录制,Flash 流媒体播放,在线聊天,视频会议等一些基本功能。国内外基于 Red5 的流媒体应用产品也在不断推广,例如在线视频会议 Openmeeting,大型 Flash 网游功夫之王 2。

Red5 概述

Red5 是一个采用 Java 开发开源的 Flash 流媒体服务器。免费开源使软件更加容易扩展,下载后你可以对源代码进行修改;更加经济,比起 FMS 高昂的费用,Red5 能为一般的应用节约大笔费用;同时服务器端的 Java 面向对象语言比起 FMS 服务器端的 ActionScript2 语言更加成熟。鉴于 Red5 的种种优势,推出不久便被广大用户所接受。

Red 5 支持:

1. 把音频(MP3)和视频(FLV, F4V, MP4, 3GP)转换成播放流;

2. 录制客户端播放流, 把摄像头,麦克风等传入的音频视频录制保存到服务器;

3. 共享对象;

4. 现场直播流发布;

5. 远程调用;

6. 协议:RTMP, RTMPT, RTMPS, and RTMPE。

Red5 服务器搭建

JDK自行安装

下载Red5

https://github.com/Red5/red5-server/releases

解压到自己的一个能记住的文件夹中 eg:F:\Red5

配置Red5相关参数

修改red5.properties配置文件..\conf\red5.properties

只需要配置HTTP 和RMTP节点的host和port即可 默认也行host配置成0.0.0.0 输入局域网IP或者127.0.0.1都可以正常访问

# Socket policy
policy.host=0.0.0.0
policy.port=843# HTTP
http.host=0.0.0.0
http.port=8855
https.port=5443
http.URIEncoding=UTF-8
http.max_keep_alive_requests=-1
http.max_threads=20
http.acceptor_thread_count=10
http.processor_cache=20# RTMP
rtmp.host=0.0.0.0
rtmp.port=1935
rtmp.io_threads=16
rtmp.send_buffer_size=65536
rtmp.receive_buffer_size=65536
rtmp.ping_interval=1000
rtmp.max_inactivity=60000
rtmp.max_handshake_time=5000
rtmp.tcp_nodelay=true
rtmp.tcp_keepalive=false
rtmp.default_server_bandwidth=10000000
rtmp.default_client_bandwidth=10000000
rtmp.client_bandwidth_limit_type=2
rtmp.bandwidth_detection=false
rtmp.encoder_base_tolerance=5000
rtmp.encoder_drop_live_future=false
# traffic optimization hinting. to disable set traffic class set to -1
# low delay + high throughput == 24 (0x18)
rtmp.traffic_class=-1
# requested maximum length of the queue of incoming connections
rtmp.backlog=32
# the interval (seconds) between each throughput calculation
rtmp.thoughput_calc_interval=15
# enable use of the default mina acceptor
rtmp.default_acceptor=true
# socket i/o pool sizes used when default acceptor is disabled
rtmp.initial_pool_size=0
rtmp.max_pool_size=2
rtmp.max_processor_pool_size=16
rtmp.executor_keepalive_time=60000
mina.logfilter.enable=false
# scheduler configs (per application)
rtmp.scheduler.pool_size=16
rtmp.deadlockguard.sheduler.pool_size=16
# message executor configs (per application) - adjust these as needed if you get tasks rejected
rtmp.executor.core_pool_size=4
rtmp.executor.max_pool_size=32
rtmp.executor.queue_capacity=64
# drop audio packets when queue is almost full, to disable this, set to 0
rtmp.executor.queue_size_to_drop_audio_packets=60
# maximum amount of time allotted to process a single rtmp message / packet in milliseconds, set it as 0 to disable timeout
rtmp.max_handling_time=2000
# connection tweaks - dont modify unless you know what you're doing
rtmp.channel.initial.capacity=3
rtmp.channel.concurrency.level=1
rtmp.stream.initial.capacity=1
rtmp.stream.concurrency.level=1
rtmp.pending.calls.initial.capacity=3
rtmp.pending.calls.concurrency.level=1
rtmp.reserved.streams.initial.capacity=1
rtmp.reserved.streams.concurrency.level=1# RTMPS
rtmps.host=0.0.0.0
rtmps.port=8443
rtmps.ping_interval=5000
rtmps.max_inactivity=60000
rtmps.max_keep_alive_requests=-1
rtmps.max_threads=20
rtmps.acceptor_thread_count=2
rtmps.processor_cache=20
# RTMPS Key and Trust store parameters
rtmps.keystorepass=password
rtmps.keystorefile=conf/keystore.jks
rtmps.truststorepass=password
rtmps.truststorefile=conf/truststore.jks# RTMPT
rtmpt.host=0.0.0.0
rtmpt.port=8088
rtmpt.ping_interval=5000
rtmpt.max_inactivity=60000
rtmpt.max_handshake_time=5000
rtmpt.max_keep_alive_requests=-1
rtmpt.max_threads=20
rtmpt.acceptor_thread_count=2
rtmpt.processor_cache=20
rtmpt.encoder_base_tolerance=5000
rtmpt.encoder_drop_live_future=true
# better setting for streaming media
rtmpt.target_reponse_size=32768
# best setting for small messages or shared objects
#rtmpt.target_reponse_size=8192
# max incoming messages to process at a time. the most that FP appears to send is 166
rtmpt.max_in_msg_process=166
# max time in millis that we will wait when offering data to the in or out queue
rtmpt.max_queue_offer_time=125
# max offer attempts
rtmpt.max_queue_offer_attempts=4# WebSocket
ws.host=0.0.0.0
ws.port=8081# Debug proxy (needs to be activated in red5-core.xml)
proxy.source_host=127.0.0.1
proxy.source_port=1936
proxy.destination_host=127.0.0.1
proxy.destination_port=1935# JMX
jmx.rmi.host=localhost
jmx.rmi.port=9999
jmx.rmi.sport=9998
jmx.rmi.port.remoteobjects=
jmx.keystorepass=password
jmx.mina.monitor.enable=false
jmx.mina.poll.interval=1000
# Whether to always create the registry in-process, not attempting to 
# locate an existing registry at the specified port. Set to "true" in order
# to avoid the overhead of locating an existing registry when you always intend
# to create a new registry in any case.
jmx.registry.create=true
# Whether or not the MBeanServerFactoryBean should attempt to locate a running 
# MBeanServer before creating one
jmx.reuse.existing.server=true
# Whether to register the MBeanServer with the MBeanServerFactory, making it 
# available through MBeanServerFactory.findMBeanServer()
jmx.register.factory=true
# Whether any threads started for the JMXConnectorServer should be started as daemon threads
jmx.daemon=true
# Whether the JMXConnectorServer should be started in a separate thread
jmx.threaded=true# Server properties
# max events to send in a single update
so.max.events.per.update=64
so.scheduler.pool_size=4
keyframe.cache.entry.max=500
war.deploy.server.check.interval=600000
fileconsumer.delayed.write=true
fileconsumer.queue.size=120
subscriberstream.buffer.check.interval=5000
subscriberstream.underrun.trigger=100
broadcaststream.auto.record=false

启动Red5

双击red.bat即可启动Red5服务器

浏览器访问查看是否搭建成功

http://localhost:port(localhost、port为配置文件中设置) 正确如下图所示

视频直播开始准备

下载demo

上图可以看到install红色的那行字。点击进去。选择OLFA 安装

如果下载不成功请看这里

确定webapps下面没有oflaDemo文件夹。下载小帅丶准备好的压缩包解压放进去即可

下载地址链接: https://pan.baidu.com/s/1Qd0UggtEhBv5nbVxQGPSzQ 密码: 4xqf

设置信息发布直播

进入发布设置界面:http://localhost:port/demos/publisher.html

查看Settings区域。选择Video后在Device中选择摄像头,并点击Start,出现视频画面(有可能会提示是否允许。选择允许即可)

Server设置

回到Server画面,在Location中输入rtmp://localhost:1935/oflaDemo,地址与red5.properties中的rtmp协议的设置必须相同。
点击Connect

右侧出现NetConnection.Connect.Success ,说明连接服务器成功。

推送视频流

切换到Video点击Publish页面中的Publish按钮即可对外发布直播

查看视频流

切换到Server点击play即可看推送的视频流

用自己的页面观看直播

需要jwplayer。为了方便大家已经放在oflaDemo里面。在上面的百度云链接下载即可。

修改相关内容 file的值是直播页面的Name的值。streamer则为Location里面的URL

<html>
<head>
<title>Red5 - OFLADemo</title>
<script type='text/javascript' src='jwplayer.js'></script>
</head>
<body>
<div id="player">
<script type='text/javascript'>jwplayer('player').setup({'flashplayer': 'player.swf','file': '直播页面的Name','streamer': 'rtmp://自己服务的IP:1935/oflaDemo','controlbar': 'bottom','width': '848','height': '360'});
</script>
</div>
</body>
</html>

使用浏览器观看

输入地址 http://localhost:port/oflaDemo/jwPalyer.html 即可查看

以上就是Red5的服务器搭建步骤

转载于:https://my.oschina.net/xshuai/blog/1838885


http://chatgpt.dhexx.cn/article/Hwyiv9On.shtml

相关文章

Red5流媒体服务器的完整尝试

1、下载Red5以及Java环境 所需要的文件如下&#xff1a;JDK可利用华为镜像快速下载 然后解压JDK与red5,配置JDK环境变量JAVA_HOMEE:\Program Files\Java\jdk1.8.0_20 配置好运行环境后&#xff0c;点击red5.bat即可启动&#xff0c;在浏览器地址栏输入http://localhost:5080/出…

流媒体服务器之Red5环境搭建

首先先介绍一下RED5&#xff0c;Red5的主要功能和Macromedia公司的FMS类似&#xff0c;提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写&#xff0c;使用RTMP作为流媒体传输协议&#xff0c;这与FMS完全兼容。它具有流化FLV、MP3文件&#xff0c…

java语言【#106. 求绝对值】(已通过)

题目描述 ​ 在数学中&#xff0c;对于小于 0 的实数 n 来说&#xff0c;它的绝对值等于 −n&#xff0c;而对于大于等于 0 的实数来说&#xff0c;它的绝对值等于自身。 ​ 输入一个实数&#xff0c;输出它的绝对值。 输入 ​ 输入一个实数 n &#xff08;−100.0≤n≤100.0…

java求数字的绝对值

1.代码如下&#xff1a; package com.aaa;import java.util.Scanner;public class Shuzi {public static void main(String[] args) { // 求数字的绝对值Scanner scnew Scanner(System.in);while (true) {System.out.println("请输入你要判断的数字");double…

java中负数取绝对值,面试篇

前言: 这篇文章主要介绍了26道Spring经典面试题总结(附带答案)的相关资料,小编在网上看到的觉得挺不错的,现在分享给大家,希望对你们有所帮助。 另外本人整理收藏了多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,下方只是部分截图 想要资料的话也可以在…

CentOS7.4配置OpenLDAP Client集成AD服务及SSSD服务与SSH服务

一、前置准备 1、基础环境说明 客户端操作系统&#xff1a;CentOS 7.4 core AD服务器&#xff1a;WinServer 2012 R2 2、AD证书导出 1).服务器管理 服务器管理→AD CS→证书颁发机构→所有任务→备份CA 2).证书备份(导出) 备份项目→设置密码(默认为空)→完成 二、OpenL…

通过AD域验证登录Linux系统(Linux安装sssd加入Windows AD域)

背景 有一台Centos 7 的Linux服务器&#xff0c;需要每个IT管理员都可以登录并进行维护&#xff0c;为了方便账户管理&#xff0c;统一认证&#xff0c;要求Linux服务器登录实现Windows AD域验证。 环境说明 AD域&#xff1a;Windows server 2019 AD域主机IP : 192.168.100.…

使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录 Linux 统一身份登录和查询POSIX 属性 (POSIX Attributes)安装组件程序加入 AD 域测试 LDAP 查询配置 NSS 和 PAM配置 SSSD验证 SSSD 配置针对 AFS 进一步配置 PA…

linux 7 realm,系统运维|Samba 系列(十五):用 SSSD 和 Realm 集成 Ubuntu 到 Samba4 AD DC...

本教程将告诉你如何将 Ubuntu 桌面版机器加入到带有 SSSD 和 Realm 服务的 Samba4 活动目录域中,以在活动目录中认证用户。 要求: 第 1 步:初始配置 1、 在把 Ubuntu 加入活动目录前确保主机名被正确设置了。使用 hostnamectl 命令设置机器名字或者手动编辑 /etc/hostname 文…

linux的sssd服务,使用FreeIPA为SS信任用户在SSSD上设置默认登录Shell

本文介绍使用FreeIPA为SS信任用户在SSSD上设置默认登录Shell的方法。 前言 IPA身份管理服务器提供与Microsoft Active Directory的双向用户身份和密码同步&#xff0c;但是在配置IPA和Active Directory之后&#xff0c;用户的默认shell是/bin/sh&#xff0c;本文将讨论如何在Fr…

freeipa 客户端 Kerberos认证 SSSD关系

参考资料&#xff1a; Documentation - FreeIPA Kerberos - FreeIPA SSSD Architecture - sssd.io Password management — MIT Kerberos Documentation https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a freeIPA中kerberos跟LDAP是怎…

集成OpenLDAP与Kerberos实现统一认证(二):基于SSSD同步LDAP账号

文章目录 1. 写作背景2. 既定目标3. 工作原理4. 安装操作4.1 创建SSSD的Bind DN4.2 安装软件包4.3 使用authconfig配置SSSD4.4 其他必要配置项4.5 配置SSH4.6 重启服务4.7 登录验证 附录&#xff1a;常见错误 1. 写作背景 写作本系列文章的背景是我们要在大数据平台/企业数据湖…

从网易云、QQ音乐下载音乐

声明&#xff1a;对于热爱音乐的人&#xff0c;还是要支持作者&#xff0c;通过付费购买正版音乐&#xff0c;这样作者才有动力创造更好的音乐给大家。 这种方法下载音乐可能很多人都知道了&#xff0c;但可能还有一些小伙伴不知道&#xff0c;所以在这里分享一下。 1.打开火狐…

3分钟下载好网易云付费音乐

学习笔记 下载网易云付费音乐 无需编程&#xff0c;三分钟下载好你想听的付费音乐&#xff0c;比如下载李荣浩的《不将就》&#xff1a; 第一步&#xff1a; 打开网址&#xff1a;不将就 第二步&#xff1a; 按直接按F12快捷键&#xff0c;如下图 。点击控制台的Network&…

网易云音乐产品体验报告

一、体验环境 体验产品 网易云音乐 软件版本 V5.8.2 手机系统 iOS 14.1 体验时间 2021-2-6 体验人 普翩 二、产品定位 slogan&#xff1a;音乐的力量 产品定位&#xff1a;音乐社交 三、用户需求分析 3.1.用户画像 用户性别比例图3.1 用户城市分布图3.2 用户兴趣分…

付费率第一 亏损显著收窄 网易云音乐将实现盈利?

网易云音乐即将登陆港交所。 8 月 1 日&#xff0c;香港联交所网站显示&#xff0c;网易云音乐已正式通过港交所上市聆讯&#xff0c;并披露了聆讯后资料集。 招股文件显示&#xff0c; 2018 年— 2020 年网易云音乐营收分别为11. 48 亿元、23. 18 亿元、48. 96 亿元&#xff…

尚硅谷微信小程序开发 仿网易云音乐App 小程序 后端接口服务器搭建

目录 小程序学习 视频相关的教程文档与笔记分享 配套服务器 源码地址&#xff1a; 接口使用说明文档 接口列表 启动服务 测试服务启动OK网页 http://localhost:3000/test.html​编辑 Postman测试服务器接口 postman配置 服务ip地址全局变量 ​编辑选择全局变量 登录…

网易云解析接口PHP源码,网易云音乐直链解析API源代码^-^

前盐 网易云网页版自带 API,但是点击字后会自动跳转到 mp3 资源播放,这样很不屌.于是咱们就封装一个吧. API 网易云的 API 为 我这个主题会把网易云的音乐链接自动变成 MP3 所以弄个图片 歌曲 ID 是什么?呐,就是这个. 源码 新建个 PHP 文件. $id = @$_GET[id]; if (empty($id)…

JAVA代码实现下载解析网易云音乐到本地电脑的demo示例

1.PC浏览器打开网易云音乐官网&#xff0c;搜索你想要下载的歌曲名称或者歌手姓名 2.点开你要下载歌曲&#xff0c;进入播放页&#xff0c;从浏览器地址栏里获得歌曲的songID。 3.pom文件引入依赖 <!-- hutool工具类--><dependency><groupId>cn.hutool</…

python爬取付费音乐包_用Python代码来下载任意指定网易云歌曲(超详细版)

前两天教了大家如何在控制台上找到真实的mp3播放地址,但是不可以下载付费的,因为只能下载可播放的歌曲。至于怎样下载付费网易云音乐,还是开个会员吧,要知道免费是最贵的的这个道理。 有粉丝看了前两天文章想用代码来装逼,我就为了满足他,特意去折腾了两天,终于写出来了…