返回顶部
分享到

Linux流媒体服务器部署流程

linux 来源:互联网 作者:佚名 发布时间:2025-02-23 09:20:06 人浏览
摘要

流媒体服务器部署 部署安装 1.更新系统 1 yum update -y 2.安装依赖组件 安装git ?git用来拉去github的软件包 1 yum install git -y 安装一系列编译环境 1 2 3 4 yum -y install gcc-c++ yum -y install pcre pcre-devel yu

流媒体服务器部署

部署安装

1.更新系统

1

yum update -y

2.安装依赖组件

  1. 安装git

? git用来拉去github的软件包

1

yum install git -y

  1. 安装一系列编译环境

1

2

3

4

yum -y install gcc-c++

yum -y install pcre pcre-devel

yum -y install openssl openssl-devel

yum -y install zlib zlib-devel

  1. 安装rtmp模块和nginx

网站:nginx—http://nginx.org/download

? RTMP-----https://github.com/arut/nginx-rtmp-module.git

可以在windows下载然后上传到目录/usr/local下

或者直接使用命令

1

2

3

cd /usr/local

git clone https://github.com/arut/nginx-rtmp-module.git

wget http://nginx.org/download/nginx-1.24.0.tar.gz

3.解压

解压安装包

1

tar -zxvf nginx-1.24.0.tar.gz

4.编译安装(添加RTMP和openssl模块)

1

2

3

cd nginx-1.24.0

./configure --add-module=/usr/local/nginx-rtmp-module --with-http_ssl_module --with-http_mp4_module

make && make install       

如果报以下错误

  • 检查:依赖组件是否有安装报错的
  • 上述.configure中rtmp模块路径是否正确

5.检查是否安装成功

启动nginx

1

2

/usr/local/nginx/sbin/nginx #启动

然后ps -ef |grep nginx,如下图则启动成功

关闭nginx

1

/usr/local/nginx/sbin/nginx -s stop

6.修改nginx配置文件

1

vim /usr/local/nginx/conf/nginx.conf

在server块内添加以下内容,在http块内,与其他location同级

1

2

3

4

5

6

7

8

9

10

11

12

13

14

location /videos/ {

               types {

                   application/vnd.apple.mpegurl m3u8;

                   video/mp2t ts;

                     }

          #明确此目录需要支持的视频格式

        add_header 'Access-Control-Allow-Origin' '*';

        add_header 'Access-Control-Allow-Methods' 'GET';

        add_header 'Access-Control-Allow-Headers' '*';

        add_header 'Access-Control-Expose-Headers' '*';

        #以上add_header 用来解决跨域问题

        alias /usr/local/nginx/videos/; #映射路径

        autoindex on; #目录索引

               }

在nginx.conf文件中添加rtmp配置与http模块同级

1

2

3

4

5

6

7

8

9

10

rtmp {

    server {

        listen 1935; # RTMP协议默认端口,可根据需要修改

        chunk_size 5242800;

        application videos{

           play /usr/local/nginx/videos/;

           meta copy;

                   }

    }

}

此配置可支持rtmp协议,适用于推拉流场景和需要用到rtmp协议的情景

安装ffmpeg

安装依赖

1

yum install yasm -y

方法一

直接yum装,源没有的话换下一个方法

1

yum install ffmpeg

方法二(centos适用)

1

2

3

yum install epel-release

yum install -y https://mirrors.ustc.edu.cn/rpmfusion/free/el/rpmfusion-free-release-8.noarch.rpm

yum install -y ffmpeg ffmpeg-devel

  • 这个镜像是中国科技大学的开源软件镜像站,相对安全
  • epel-release(EPEL),是Fedora社区打造,为基于红帽、centos等企业级发行版linux提供的高质量软件包的一个项目,等于扩展了一个软件仓库
  • rpmfusion-free-release-8.noarch.rpm 中的8对应的是版本号 比如这个适用centos8

方法三

编译安装

1

2

3

4

5

6

cd ~   #切换到root主目录

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg    //下载ffmpeg

cd ffmpeg

./configure --prefix=/usr/local/ffmpeg

make

make install

在编译执行./configure --prefix=/usr/local/ffmpeg可能会报错nasm没有或者版本太老

1

yum install nasm

如果没有则手动编译安装

1

2

cd /usr/local

wget http://123.56.3.143:8888/download/nasm-2.16.03.tar.gz

解压编译

1

2

3

4

5

tar -zxvf nasm-2.16.03.tar.gz

cd nasm-2.16.03

./configure

make

make install

重新执行

1

2

3

4

./configure --prefix=/usr/local/ffmpeg

#编译时间挺久的耐心等待半小时

make

make install

拷贝ffmpeg命令(方便调用)

1

cp /usr/local/ffmpeg/bin/* /usr/bin/

将/usr/local/ffmpeg/bin/加到/etc/profile 环境变量也行,复制下方命令即可

1

2

echo “export PATH=$PATH:/usr/local/ffmpeg/bin” >> /etc/profile

source /etc/profile

ffmpeg相关使用命令

1

2

3

4

5

6

7

8

9

ffmpeg -i 本地视频地址 -y -c:v libx264 -strict -2 转换视频.mp4

 

ffmpeg -y -i 本地视频.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 转换视频.ts

 

ffmpeg -i 本地视频.ts -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts

#-segment_time 切片时长,例子为5秒

#前缀-%03d.ts 输出ts格式为 前缀-001.ts、前缀-002.ts, %03d代表3位数

 

ffmpeg -i 加视频 可以输出各种信息 format部分的duration是时长信息

知识拓展

  • HLS 是苹果公司推出的一种流媒体传输协议。它的工作原理是将整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一部分。这样的设计使得它能够很好地适应不同的网络状况,比如在网络带宽波动时,依然可以比较流畅地播放视频。
  • m3u8 + ts分片采用了HLS协议,即m3u8为索引文件,ts为小分片,m3u8是众多ts格式视频URL的集合,
  • 苹果自带浏览器可直接访问m3u8格式文件,而无需第三方播放器,可用来判断流媒体服务器是否搭建成功

测试

将一个mp4上传到 /usr/local/nginx/videos 目录

1

2

cd /usr/local/nginx/videos

ffmpeg -i 上传的视频.mp4 -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts

  • 方法一:浏览器访问 serverIP/videos 点击.m3u8格式结尾的视频看是否能下载
  • 方法二:苹果浏览器直接访问这个serverIP/videos/视频索引.m3u8 观察是否能播放
  • 方法三:VLC第三方播放器 点击左上角----媒体----打开网络窜流-----网络----输入URLserverIP/videos/视频索引.m3u8

问题:访问videos目录报404

检查video目录是否在/usr/local/nginx/下

给videos权限 chmod 644 -R /usr/local/nginx/videos

Nginx统一管理命令

1.创建nginx.sh

1

2

3

mkdir /usr/local/nomaxbin/ 创建脚本目录

touch /usr/local/nomaxbin/nginx.sh 创建脚本文件

vim /usr/local/nomaxbin/nginx.sh 编辑脚本文件

nginx.sh内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

#!/bin/sh

 

# nginx统一管理脚本-add.yjc.2020年3月18日 10:58:58

 

# defined

DES="Nginx服务器"

NGNIX_PATH="/usr/local/nginx/sbin/"

 

# 切换目录

cd $NGNIX_PATH

 

NGNIX_COUNT=`ps -C nginx --no-header | wc -l`

if [ "$1" == "stop" ] || [ "$1" == "shutdown" ]; then

    # 停止

    if [ $NGNIX_COUNT -gt 0 ]; then

        echo "正在停止..."

        ./nginx -s stop

        echo "服务已停止,使用status命令查看状态。"

    else

        echo "服务目前处于停止状态,无需再次停止"

    fi

elif [ "$1" == "start" ] || [ "$1" == "" ]; then

    # 启动

    if [ $NGNIX_COUNT -gt 0 ]; then

        echo "服务正在运行,PID:"

        cat ../logs/nginx.pid

    else

        echo "正在启动..."

        ./nginx

        echo "服务已启动,使用status命令查看状态。"

    fi

elif [ "$1" == "restart" ]; then

    # 重启

    if [ $NGNIX_COUNT -gt 0 ]; then

        echo "正在停止服务..."

        ./nginx -s stop

        echo "服务已停止。"

    fi

    NGNIX_COUNT=`ps -C nginx --no-header | wc -l`

    echo "Watting..." 

    while [ $NGNIX_COUNT -gt 0 ] 

    do 

        sleep 2

        NGNIX_COUNT=`ps -C nginx --no-header | wc -l`

        echo "Watting..." 

    done

    echo "正在启动服务..."

    ./nginx

    echo "服务已启动,使用status命令查看状态。"

elif [ "$1" == "dellog" ]; then

    # 重启

    if [ $NGNIX_COUNT -gt 0 ]; then

        echo "正在停止服务..."

        ./nginx -s stop

        echo "服务已停止。"

    fi

    NGNIX_COUNT=`ps -C nginx --no-header | wc -l`

    echo "Watting..." 

    while [ $NGNIX_COUNT -gt 0 ] 

    do 

        sleep 2

        NGNIX_COUNT=`ps -C nginx --no-header | wc -l`

        echo "Watting..." 

    done

 

    echo "正在删除日志..."

    rm -rf ../logs/*.log

    echo "日志删除完成..."

 

    echo "正在启动服务..."

    ./nginx

    echo "服务已启动,使用status命令查看状态。"

elif [ "$1" == "log" ]; then

    # 持续输出日志

    tail -f ../logs/access.log

elif [ "$1" == "errlog" ]; then

    # 持续输出日志

    tail -f ../logs/error.log

elif [ "$1" == "status" ]; then

    # 状态

    if [ $NGNIX_COUNT -gt 0 ]; then

        echo "服务正在运行,PID:"

        cat ../logs/nginx.pid

    else

        echo "服务处于停止状态"

    fi

elif [ "$1" == "help" ]; then

    # 重新部署

    echo "** "$DES

    echo "** NGNIX_PATH:"$NGNIX_PATH   

    echo "----------------------------"

    echo "  start:启动"

    echo "  stop/shutdown:停止"

    echo "  restart:重启"

    echo "  log:持续输出控制台访问日志"

    echo "  errlog:持续输出控制台错误日志"

    echo "  status:服务运行状态"

    echo "  help:帮助说明"

    echo "  dellog:删除日志命令"

else

    # error

    echo "命令错误,请使用help命令查看具体使用说明"

fi

2.赋予执行权限

1

chmod +x /usr/local/nomaxbin/nginx.sh

3.配置环境变量

1

2

echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile

source /etc/profile 更新环境变量

4.执行命令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 启动

nginx start

# 停止

nginx stop

nginx shutdown

# 重启

nginx restart

# 持续输出控制台访问日志

nginx log

# 持续输出控制台错误日志

nginx errlog

# 服务运行状态

nginx status

# 帮助说明

nginx help

# 删除日志命令

nginx dellog

2.赋予执行权限

1

chmod +x /usr/local/nomaxbin/nginx.sh

3.配置环境变量

1

2

echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile

source /etc/profile 更新环境变量

4.执行命令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 启动

nginx start

# 停止

nginx stop

nginx shutdown

# 重启

nginx restart

# 持续输出控制台访问日志

nginx log

# 持续输出控制台错误日志

nginx errlog

# 服务运行状态

nginx status

# 帮助说明

nginx help

# 删除日志命令

nginx dellog


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计