农业溯源系统视频回放功能实现记录

本文详细介绍了农业溯源系统中视频回放功能的实现过程,包括解决nginx-rtmp-module的视频录制问题,配置录像与转码,以及解决微信浏览器中视频强制全屏播放的问题。同时,探讨了不同直播平台的推流问题和服务器配置,如硬盘分区、挂载、防火墙设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

农业溯源系统视频回放功能实现记录

一、准备工作

1、 解决 nginx-rtmp-module 的视频录制问题

nginx-rtmp-module 包含有录制功能,GitHub上的相关文档

录制相关的配置:

rtmp {
    server {
        listen 1935;
        ## 点播配置
        application vod {
            play /home/flv;
        }

        ## 直播流配置 HLS协议支持
        application hls{
            ## 开启直播
            live on;

            ## 开启HLS
            hls on;

            ## hls目录配置
            hls_path /hls/tmp;

            ## 片段时长
            hls_fragment 3s;

            ## 开启流目录
            hls_nested on;

            record all;
            record_path /home/re;
            record_suffix -%Y%m%d%H%M%s.flv;
            record_interval 3m;
            exec_record_done ffmpeg -y -i $path -vcodec copy -acodec copy /home/mp4/$basename.mp4;
        }
    }
}

代码中 exec_record_done ffmpeg -y -i $path -vcodec copy -acodec copy /home/mp4/$basename.mp4; 这一行的目的是在每录制完一个视频后对视频进行转码,由于视频本身就是H.264+ACC,所以不需要额外进行音视频编码修改,直接copy即可(这里我在测试过程中使用的官方示例中的 exec_record_done ffmpeg -y -i $path -acodec libmp3lame -ar 44100 -ac 1 -vcodec libx264 /home/mp4/$basename.mp4; 在实际测试中会产生高额的CPU性能占用,所以PASS)。

因为转码时占用的资源太大,我甚至考虑过直接使用录制的flv文件来播放,但是查询过诸多资料后发现,flv在多平台的兼容性方面有很大问题,所以PASS,其中本人研究最多的是使用Bilibili开源的 flv.js,这个插件在使用时存在很多问题,比如因为视频不规范导致音频与视频不周步,导致缓存快速爆满,从而只能播放视频的前一小段等等。

另外,录制后转码功能因为需要在转码完成后删除录制的原始文件,所以需要自定义一个脚本并保存为 ffmp4,添加 777 权限后放入 /usr/bin/ 文件夹内:

#!/bin/bash

ffmpeg -y -i $1 -vcodec copy -acodec copy $2;
rm -f $1

到时录制完成后的配置代码改为:

exec_record_done ffmp4 $path /home/mp4/$basename.mp4

服务器安装多块硬盘,预计共有四个高清摄像头需要录制视频,所以,到时使用RAID划分一个小空间进行临时存储 nginx-rtmp-module 录制的 FLV 视频,四个平均的大硬盘空间分别存储每个摄像头转码后的视频文件;

每个摄像头使用单独的 application 并配置严格权限,权限配置如下:

application hls {
    allow publish 127.0.0.1;
    deny publish all;
}

开启流目录功能后,HLS视频获取格式改变为:http://xx.xx:端口/APP名/流ID/index.m3u8 不开启时格式为:http://xx.xx:端口/APP名/流ID.m3u8

本过程中使用过或有价格的资料:

  1. https://github.com/arut/nginx-rtmp-module/wiki/Directives#hls_fragment (nginx-rtmp-module 官方文档)
  2. https://github.com/bilibili/flv.js/blob/master/docs/api.md (flv.js 官方文档)
  3. 洞察 video 超能力系列——玩转 flv - 掘金 (洞察 video 超能力系列——玩转 flv)
  4. 西瓜播放器 | 插件 (西瓜视频播放器插件文档)

2、解决微信浏览器中视频强制全屏播放问题

由于本项目希望使用一个方便操作的时间导航条对视频进行极速跳转,不但需要对录制的视频文件进行高速检索,还需要在视频不能在单独的窗口中播放。

3、常见直播平台推流问题

斗鱼直播:

exec ffmpeg -re -i rtmp://localhost/dy/$name -vcodec copy -acodec aac -b:a 192k -f flv
"rtmp://send3a.douyu.com/live/6899744rgcqcG5Hg?wsSecret=ec82ff1955b17448d573f51aec0faf6d&wsTime=5cc
fa595&wsSeek=off&wm=0&tw=0&roirecognition=0";

YY直播:

exec ffmpeg -r 80 -i rtmp://localhost/dy/$name -vcodec copy -acodec copy -f flv "rtmp:/
/mcs.rtmp.yy.com/newpublish/1382626070_1382626070_15013_2450248371_0?secret=e018f205469747b5d5b5ca3
11b5a8dcc&t=1557162989&cfgid=15013_1200_800&ex_videosrc=20000&extmeta55=1";

Bilibili直播:

exec ffmpeg -r 80 -i rtmp://localhost/dy/$name -vcodec copy -acodec copy -f flv "rtmp:/
/txy.live-send.acg.tv/live-txy/?streamname=live_411486926_69696064&key=e5efa292d42475fff5b65b3d6a9d
2ef9";

各平台每天的个人推流地址都会变化,后期需要做相关工作;

3、服务器配置相关

服务器安装多块硬盘,方案为 1 块 600G 固态用作系统盘,10 块 3.5 寸硬盘配置为 RAID5 陈列方式,

修改 nginx 的用户与 lighttpd 一致,以便于文件共享使用,新服务器 nginx 配置文件位于 /etc/nginx/nginx.conf,在该文件的第一行加入:

user lighttpd lighttpd;

配置 lighttpd 用户可登录,并增加密码,以便于使用该用户权限远程传输文件

[root@localhost ~]# vi /etc/passwd

修改 lighttpd 用户如下:

lighttpd:x:996:994:lighttpd web server:/var/www/lighttpd:/bin/bash

对 lighttpd 用户配置密码:

[root@localhost ~]# passwd lighttpd
更改用户 lighttpd 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

大容量硬盘分区和挂载:

[root@localhost ~]# parted /dev/sdb
print list
mklabel gpt
y
mkpart
sdb1
ext4
0
64TB
Ignore
print list
quit
[root@localhost ~]# fdisk -l
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkdir /rec
[root@localhost ~]# mount /dev/sdb1 /rec
[root@localhost ~]# df -Th
[root@localhost ~]# vim /etc/fstab
/dev/sdb1               /rec                    ext4    defaults        0 0

防火墙配置:

vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not har
m your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <service name="https"/>
  <port protocol="tcp" port="1935"/>
  <port protocol="tcp" port="888"/>
</zone>

查看硬盘分区的 Inode 使用情况:

[root@localhost mp4]# df -Ti
文件系统                类型         Inode 已用(I)   可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root xfs      225415168   83759 225331409       1% /
devtmpfs                devtmpfs  16474555     618  16473937       1% /dev
tmpfs                   tmpfs     16477574       1  16477573       1% /dev/shm
tmpfs                   tmpfs     16477574     810  16476764       1% /run
tmpfs                   tmpfs     16477574      16  16477558       1% /sys/fs/cgroup
/dev/sda1               xfs         487936     327    487609       1% /boot
/dev/sdc1               ext4     244191232     109 244191123       1% /www
/dev/sdb1               ext4     976750592      27 976750565       1% /rec
tmpfs                   tmpfs     16477574       1  16477573       1% /run/user/0
tmpfs                   tmpfs     16477574       1  16477573       1% /run/user/997

查看硬盘分区使用情况(按容量):

[root@localhost mp4]# df -Th 
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs       430G  3.3G  427G    1% /
devtmpfs                devtmpfs   63G     0   63G    0% /dev
tmpfs                   tmpfs      63G     0   63G    0% /dev/shm
tmpfs                   tmpfs      63G  9.4M   63G    1% /run
tmpfs                   tmpfs      63G     0   63G    0% /sys/fs/cgroup
/dev/sda1               xfs       947M  146M  802M   16% /boot
/dev/sdc1               ext4      7.3T  122M  6.9T    1% /www
/dev/sdb1               ext4       58T  343M   56T    1% /rec
tmpfs                   tmpfs      13G     0   13G    0% /run/user/0
tmpfs                   tmpfs      13G     0   13G    0% /run/user/997

装多块

硬盘,

预计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值