视频文件自动转rtsp流
最近碰到一个项目需要用到 rtsp 视频流做测试, 由于真实环境的 摄像头 并不能满足需求,故尝试了一下用本地视频文件转换成rtsp视频流做测试,记录一下~
采用方案: Docker + EasyDarwin + FFmpeg
准备工作:
1. 创建一个文件夹 easydarwin
2. cd easydarwin
3. wget https://github.com/EasyDarwin/EasyDarwin/releases/download/v8.1.0/EasyDarwin-linux-8.1.0-1901141151.tar.gz (下载EasyDarwin 软件包)
4. 创建: Dockerfile
5. 将easydarwin 的配置文件 也放到此目录下: easydarwin.xml
6. 创建一个自动转换 /root/video 目录下的视频文件成rtsp 流的 shell 脚本: start.sh
编写Dockerfile:
FROM centos:latest
USER root COPY ./EasyDarwin-linux-8.1.0-1901141151.tar.gz /EasyDarwin-linux-8.1.0-1901141151.tar.gz
COPY ./start.sh /start.sh
RUN mkdir -p /etc/streaming/
COPY ./easydarwin.xml /etc/streaming/easydarwin.xml
RUN yum -y install tar \
&& yum -y install gcc automake autoconf libtool make wget RUN gzip -d /EasyDarwin-linux-8.1.0-1901141151.tar.gz \
&& tar -xf /EasyDarwin-linux-8.1.0-1901141151.tar \
&& mv EasyDarwin-linux-8.1.0-1901141151 EasyDarwin \
&& cd / RUN wget https://ffmpeg.org/releases/ffmpeg-4.1.5.tar.xz \
&& tar -xf ffmpeg-4.1.5.tar.xz \
&& cd ffmpeg-4.1.5 \
&& curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz \
&& tar -xf yasm-1.3.0.tar.gz \
&& cd yasm-1.3.0 \
&& ./configure \
&& make \
&& make install \
&& cd / RUN cd /ffmpeg-4.1.5 \
&& ./configure \
&& make \
&& make install \
&& cd / ENTRYPOINT /start.sh
编写start.sh
#!/bin/sh
cnt=`ps -ef | grep "[e]asydarwin" | wc -l`
if [ $cnt -lt 1 ];then
nohup /EasyDarwin/easydarwin &
fi
if [[ ! -d /video ]];then
mkdir -p /video
fi while true;do
for video in `ls /video`; do
if [[ "$(ps -ef | grep "$video" | grep -v "grep" | wc -l | tr -d ' ' )" = "1" ]]; then
echo "Safe $video"
else
short_name=`echo $video | cut -d '.' -f 1`
nohup /ffmpeg-4.1.5/ffmpeg -re -stream_loop -1 -i /video/$video -vcodec copy -rtsp_transport tcp -f rtsp rtsp://localhost/$short_name &
echo "Started $video"
fi
done sleep 1m
done
用途说明:
Dockerfile将我们需要的环境准备好,包括安装编译安装EasyDarwin以及需要的依赖包, FFmpeg等, 最后运行 start.sh. 注意 Docker中 ENTRYPOINT 和 CMD 命令的用法区别。
start.sh 用来启动EasyEarwin,并每隔1分钟查看 /root/video 目录下的视频文件,如果有新文件,就会自动使用ffmpeg 转为rtsp流, 地址为 rtsp://localhost/short_name, 其中localhost使用时改成服务器的IP地址,short_name 为 当前食品文件的文件名(去掉扩展名, 如: video.mp4 的 short_name 为 video)
最后打包镜像,然后运行container, 可以在 easydarwin 目录的同级别创建 启动脚本: easydarwin.sh
#!/bin/bash
easy=`ls ./easydarwin/*.gz | wc -l`
if [[ $easy -lt 1 ]];then
wget https://github.com/EasyDarwin/EasyDarwin/releases/download/v8.1.0/EasyDarwin-linux-8.1.0-1901141151.tar.gz
mv EasyDarwin-linux-8.1.0-1901141151.tar.gz ./easydarwin
fi
local_img=`docker images | grep "[e]asydarwin" | wc -l`
if [ $local_img -lt 1 ];then
cd easydarwin
docker build -t easydarwin_qa . --no-cache
cd ..
fi #挂载host 的 /root/video 到 container 的对应路径
docker run -dit --net host --restart=always --name easy_qa -v /root/video:/video easydarwin_qa
所以只需在装了docker的服务器上启动此shell就可以: bash easydarwin.sh
视频文件自动转rtsp流的更多相关文章
- 树莓派USB存储设备自动挂载并通过脚本实现自动拷贝,自动播放视频,脚本自动升级等功能
需求:首先需要树莓派自动挂载USB设备,然后扫描USB指定目录下文件,将相关文件拷贝至树莓派指定目录,然后通过omxplayer循环播放新拷贝文件视频 1. 树莓派实现USB存储设备自动挂载 树莓派U ...
- 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo
#include <stdio.h> #include <tchar.h> #include <time.h> #include <windows.h> ...
- javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- web网页中使用vlc插件播放相机rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 使用vlc播放器播放rtsp视频 使用vlc进行二次开发做自己的播放器 vlc功能还是很强大的,有很多的现成的二次开发接口,不需配置太多即可轻松做客户端播放 ...
- [工具]利用EasyRTSPClient工具检查摄像机RTSP流不能播放原因以及排查音视频数据无法播放问题
出现问题 我们在做流媒体开发的过程中,进程会出现摄像机RTSP流莫名其妙无法播放的问题,而我们常用的vlc经常是直接弹出一个无法播放的提示框就完事了,没有说明出错的原因,或者在vlc的消息里面能看到日 ...
- 使用ffmpeg -re循环推流(循环读取视频文件)推送EasyDSS RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的方法
需求分析 众所周知,EasyDSS与EasyNVR最大的区别是,EasyDSS被动接受前端设备的推流,将推送过来的直播流进行直播转码.智能处理.视频分发,在通过CDN分发节点分发到终端播放SDK.而E ...
- 使用vlc播放器播放rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器播放rt ...
- 直接将视频文件原码流转换成YUV,输出到屏幕显示
#include "stdafx.h" #define inline _inline#ifndef INT64_C#define INT64_C(c) (c ## LL)#defi ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器功能简介---实时数据统计报表、视频文件上传、点播、分享、集成
熟悉EasyDSS流媒体服务器的小伙伴应该都知道,EasyDSS通过将EasyRTMP推流的直播流进行直播转码.智能处理.视频分发,再通过 CDN 分发节点分发到终端播放 SDK为观众播放高清低延时的 ...
随机推荐
- 【python实现卷积神经网络】定义训练和测试过程
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- k8s~helm镜像版本永远不要用latest
对于容器编排工具k8s来说,你可以使用它规定的yaml格式的脚本,使用客户端kubectl来与k8s进行通讯,将你定义好的yaml部署脚本应用到k8s集群上,而这对yaml脚本一般来说都是很像的,就是 ...
- Java包机制和Javadoc的使用
1.什么是包机制? 包(package)其实本质上就是一个文件夹,使用包是为了让相同类名的两个类可以使用,也就是操作系统中的文件夹,用来解决重名并且让相同的功能类放在同一个包,使开发更加有条理. 注意 ...
- css定位有哪几种方式
一.position 属性规定元素的定位类型,它一般有以下四个值: 默认static 相对定位relative 绝对定位absolute 固定定位fixed 元素可以使用的顶部,底部,左侧和右侧属性定 ...
- 学习笔记分享之汇编---3. 堆栈&标志寄存器
前言: 此文章收录在本人的<学习笔记分享>分类中,此分类记录本人的学习心得体会,现全部分享出来希望和大家共同交流学习成长.附上分类链接: https://www.cnblogs.c ...
- 提升效率必备!8个超好用的Python内置函数
文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 吃着不想停 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- 判断一个字符串是否是合法IP地址
# -*- coding: utf-8 -*- """ @File:test06_判断ip地址是否合法.py @E-mail:364942727@qq.com @Time ...
- CSRF(跨站请求伪造)学习总结
前言 参考大佬的文章,附上地址 https://www.freebuf.com/articles/web/118352.html 什么是CSRF? CSRF,中文名字,跨站请求伪造,听起来是不是和XS ...
- testNG 常用的注解
常用注解介绍: @BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次 @AftereSuite 在该套件的所有测试都运行在注释方法之后,仅运行一次 @BeforeClass ...
- [YII2] 展示页面显示图片 以及手机号隐藏为*和姓名隐藏姓为*,