Linux下视频流媒体服务器搭建详解

2024-06-12 19:58

本文主要是介绍Linux下视频流媒体服务器搭建详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标用于搭建内网流媒体服务器支持视频的点播。

背景

用于支持培训网站中视频点拨功能,在培训网站总体方案中需要加入流媒体服务器,用于存储和传输视频资源。

相关概念

  • 流媒体
    流媒体(Streaming Media)是一种新兴的网络传输技术,在互联网上实时顺序地传输和播放视/音频等多媒体内容的连续时基数据流。

流媒体技术包括流媒体数据采集、视/音频编解码、存储、传输、播放等领域。

  • 流媒体系统组成
    包括编码工具、流媒体数据、服务器、网络和播放器。

  • 流媒体传输过程
    如下图所示:

  • 传输协议
    RSVP: 资源预留协议
    RTP: 实时传输协议
    RTCP: 实时传输控制协议
    MMS: 微软流媒体服务协议
    RTSP: 实时流协议
    RTMP: 实时消息传输协议
    MIME: 多目因特网电子邮件扩展协议

解决方案

商业方案

  • Real Network的Real System

    服务端软件:Helix Server
    平台:Windows or Linux
    文件格式:RealAudio, Realvideo, RealFlash
  • 微软的Windows Media Services

    服务端软件:Windows Media Server
    平台:Windows
    文件格式:ASF, WMV
  • 苹果公司的Quick Time系列

    服务端软件:QuickTime Streaming Server (开源版本为Darwin Streaming Server)
    平台:MacOS X, Linux, Windows
    文件格式:MOV, MP4

在这三家公司的流媒体产品中,RealNetworks公司的免费服务端Helix Server Basic最大提供个流的并发,仅支持其专有编码RealAudio和RealVideo,基本上只能算是体验性的产品;微软公司的流媒体服务端Windows Media Server附带于其服务器产品Windows Server中,但只有最高版本的Windows Server Enterprice才具有完整的包括组播在内的所有流媒体服务器功能;苹果公司的Darwin Streaming Server(简称DSS)完全免费,没有任何功能限制,且符合国际标准。

开源/免费解决方案

  • ffmpeg

    全平台视频转换
    开源
  • RED5

    Red5是一个采用Java开发开源的Flash流媒体服务器。它支持:把音频(MP3)和视频(FLV)转换成播放流; 录制客户端播放流(只支持FLV);共享对象;现场直播流发布;远程调用。Red5使用RSTP作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash流媒体播放,在线聊天,视频会议等一些基本功能。
    开源地址:[](https://github.com/Red5/red5-server)
  • Darwin Streaming Server

    为苹果公司视频流解决方案的开源版本。
  • easyDarwin

    国内基于Darwin Streaming Server二次开发的流媒体服务器,有中文支持网站。

安装配置

RED5

使用HTTP协议播放
  1. 首先从github下载已编译版本,因为在Linux上安装使用,直接下载 red5-server-1.0.7-RELEASE.tar.gz文件即可。
  2. Java程序,在服务器上安装jre1.7版本后即可解压运行。测试阶段可以使用./red5-debug.sh启动red5服务器。在浏览器上输入http://[serverip]:5080/可以看到red5控制主页。
  3. 在red5安装目录下的webapp/vod目录下的视频文件可以在本地VLC播放器上连接http://[serverip]:5080/[filename]进行播放。

Darwin Streaming Server

功能同easyDarwin,在Linux上安装比较繁琐,所以暂时只试用easyDarwin。

easyDarwin

使用RTSP协议播放
  1. 首先从github下载源码或者已编译版本,因为上面有CentOS的已编译版本,直接下载解压即可使用。
  2. 使用root账户启动执行程序,首次启动迁移开启调试模式,./easydarwin -c ./easydarwin.xml -d
  3. 启动后,可以在执行的从终端看到调试信息。同时使用http://[serverip]:8088可以登录,默认使用admin/admin登录。
  4. 在Movies目录下放置一些视频文件,就可以在客户端使用播放器进行播放,我测试使用的是VLC。

连接流

播放流

Nginx + HLS

HLSHTTP Live Streaming苹果公司开放的支持html5直接播放的视频流技术。
Nginx实现http服务器功能,可以通过http访问m3u8文件实现播放。

要使用HLS播放的第一步,是将视频文件切割成多个ts视频流,然后使用m3u8索引文件进行播放。生成m3u8和ts文件可以借助ffmpeg工具,使用如下命令就可以将一般的视频文件转换成HLS支持的文件。

ffmpeg -i "G:\video\7 magic leap2.avi" -f hls "G:\video\HLR\test.m3u8"

对于大文件用上面这种方式有可能出现m3u8缺少索引的情况,因此也可以使用以下的方式对文件进行转换。

ffmpeg -i bigfile.mp4 -codec:v libx264 -codec:a aac -map 0 -f ssegment -segment_format mpegts -segment_list tos.m3u8 -segment_time 10 taste_of_shanghai%04d.ts
直接使用Nginx访问文件路径

不需要多余的软件,直接将m3u8文件所在目录设置为http server的根目录。

 server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {#    root   html;root /var/www/html;index  index.html index.htm;}

即可使用播放器打开远程连接。

hlr_playback

Nginx + jwplayer

Nginx编译时增加mp4和flv模块,可以让Nginx支持flv和mp4格式。为了后面说明支持RMTP协议,同时在增加RTMP模块。

  • 安装依赖包
yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64
tar xzvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install
tar xzvf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make 
make install
tar xzvf yamdi-1.9.tar.gz
cd yamdi-1.9
./cofigure
gcc yamdi.c -o yamdi -O2 -Wall
tar xzvf openssl-1.0.1t.tar.gz
cd openssl-1.0.1t
./config
make depend
make install
  • 安装ffmpeg以及依赖包
    需要安装yasm, x264, LAME, libogg,libvorbis, libvpx, faad2, faac
# 汇编工具
# 请网络搜索安装包
unzip yasm-1.2.0-1.el6.x86_64.zip
rpm -ivh yasm-1.2.0-1.el6.x86_64.rpm
# h.264编码
# http videolan.org
tar xjvf last_x264.tar.bz2
cd x264-snapshot-20160718-2245
./configure --enable-shared
make
make install
# LAME mp3编码器
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm
make
make install
# libogg 音频编码器
wget http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
tar xzvf libogg-1.3.2.tar.gz
cd libogg-1.3.2
./configure
make
make install
# libvorbis 音频编码器
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
tar xzvf libvorbis-1.3.5.tar.gz
cd libvorbis-1.3.5
./configure
make
make install
# libvpx VP8编码解码器
# 网络搜索
tar xjvf libvpx-1.5.0.tar.bz2
cd libvpx-1.5.0
./configure --enable-shared
make
make install
# FAAD2 MPEG-2和AAC格式的编解码器
wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
tar xzvf faad2-2.7.tar.gz
cd faad2-2.7
./configure
make
make install
# faac AAC编解码器
wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
tar xzvf faac-1.28.tar.gz
cd faac-1.28
./configure
make
make install
# xvid 视频编码
wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar zxvf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic
./configure
make
make install
# ffmpeg 转换工具
wget http://ffmpeg.org/releases/ffmpeg-3.1.1.tar.bz2
tar xjvf ffmpeg-3.1.1.tar.bz2
cd ffmpeg-3.1.1
./configure  --prefix=/opt/ffmpeg/ \
--enable-version3  \
--enable-libvpx \
--enable-libfaac \
--enable-libmp3lame  \
--enable-libvorbis \
--enable-libx264 \
--enable-libxvid \
--enable-shared \
--enable-gpl \
--enable-postproc \
--enable-nonfree  \
--enable-avfilter \
--enable-pthreadsmake
# 可以忽略编译过程中的警告信息
make install
  • 修改/etc/ld.so.conf
inclue ld.so.conf.d/*.conf
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib

执行ldconfig使修改生效。

  • 编码测试
ffmpeg -i ./a_day_with_htc_vive.avi -f hls ./htcvive.m3u8
  • 编译Nginx
wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
tar xzvf nginx_mod_h264_streaming-2.2.7.tar.gz# https://github.com/arut/nginx-rtmp-module
unzip nginx-rtmp-module-master.zip 
vi nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c 
# 注释以下内容
/* TODO: Win32 */
if (r->zero_in_uri)
{
return NGX_DECLINED;}
groupadd nginx
useradd nginx
usermod -G nginx nginx
tar zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure --prefix=/usr/local/nginx \
--add-module=/opt/video/nginx_mod_h264_streaming-2.2.7 \
--with-http_flv_module \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre=/opt/video/pcre-8.37 \
--with-zlib=/opt/video/zlib-1.2.8 \
--user=nginx --group=nginx \
--add-module=/opt/video/nginx-rtmp-module-master \
--with-cc-opt=-I/opt/ffmpeg/include \
--with-ld-opt=-L/opt/ffmpeg/lib-R/opt/ffmpeg/libmake 
make install
  • 配置nginx.conf文件
    server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root /var/www/html;index  index.html index.htm;location ~ \.flv${flv;}location ~ \.mp4${mp4;}}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {root /var/www/html;break;}

这篇关于Linux下视频流媒体服务器搭建详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055194

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin