直播平台源码的搭建,离不开流媒体视频服务

前言

最近自己在研究有关于直播平台源码流媒体播放的技术,网上资料甚少。出于开源精神以及在查阅资料得到各位大佬的帮助,故将自己的心得写下记录,便于分享以及日后维护。

在此极力感谢并推荐雷神(雷霄骅)

个人博客:https://blog.csdn.net/leixiaohua1020

系统组成

一个完整的直播平台源码流媒体系统大致需要三个部分组成:编码器、流服务器和播放器。

编码器通过对内容来源(如MP3文件或者麦克风输入)进行编码,并将编码过的内容发送到直播平台源码流服务器;直播平台源码流服务器再将它们发布到Internet,这样直播平台源码客户端的播放器只要连接到流服务器就可以进行在线播放了。

而本次搭建过程是基于RTMP协议完成。

RTMP协议简介

RTMP播放过程

播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。

RTMP连接都是以握手作为开始的。

1:建立连接阶段用于建立客户端与服务器之间的“网络连接”;

2:建立流阶段用于建立客户端与服务器之间的“网络流”;

3:播放阶段用于传输视音频数据。

Red5 概述

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

Red 5 支持:

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

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

2、共享对象;

3、现场直播流发布;

4、远程调用;

5、协议:RTMP, RTMPT, RTMPS, and RTMPE。

Red5 服务器搭建

JDK自行安装_本文不做演示

可参考:https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html

下载Red5:(本人使用版本:1.0.10)

官网:http://red5.org/

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

下载后解压到自己的固定文件夹,如图:

在这里插入图片描述

可以选择在conf/red5.properties文件下修改IP和端口号

# Socket policy

policy.host=0.0.0.0

policy.port=843



# HTTP

http.host=192.168.1.115 //可在此修改HTTP  IP地址

http.port=5080

https.port=5443

http.URIEncoding=UTF-8

http.max_headers_size=8192

http.max_keep_alive_requests=-1

http.max_threads=20

http.acceptor_thread_count=10

http.processor_cache=20



# RTMP

rtmp.host=192.168.1.115 //可在此修改IP地址

rtmp.port=1935

rtmp.io_threads=8

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=8

rtmp.executor_keepalive_time=60000

mina.logfilter.enable=false

# scheduler configs (per application)

rtmp.scheduler.pool_size=8

rtmp.deadlockguard.sheduler.pool_size=8

# 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

# maximum packet size allowed in bytes

rtmp.max_packet_size=3145728



# 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=8

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=8

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



# 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

fileconsumer.wait.for.keyframe=true

subscriberstream.buffer.check.interval=5000

subscriberstream.underrun.trigger=100

subscriberstream.max.pending.frames=10

subscriberstream.max.sequential.frames=10

broadcaststream.auto.record=false

启动red5.bat

在这里插入图片描述

出现上图后在浏览器输入:http://IP:port/

如:http://192.168.1.115:5080/

在这里插入图片描述

即代表启动成功!

声明:本文由云豹科技转发,如有侵权请联系作者删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值