使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

这篇具有很好参考价值的文章主要介绍了使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

近期单位用户提出需求,需要在单位内部的9台安卓智能电视(小米电视)上同步播放用户提供的宣传视频,希望能够做到所有电视音视频同步播放(电视均位于食堂内部,使用内置扬声器,各电视间音频延迟不同会导致混响) 。

由于电视在安装时只预留了电源线,使用HDMI分线器需要重新布明线;同时由于无线广播同屏系统采购价格较贵,最终经过研究决定利用公司已有的WLAN基础设施,在公司内部无线局域网上搭建流媒体服务器,在智能电视上装流媒体播放器,实现实时收看服务器上的视频。

经过测试,使用RTSP+UDP协议,播放1080P 25帧每秒的视频,各台电视能够实现音视频同步,效果可以媲美HDMI分线器,下面分享下该方案的实现过程。

按照本文的思路,可以实现企业内部电视台、宣传视频通过无线网实时广播到多个电视上播放的场景,当然具体应用效果还依赖于企业实际网络环境及多媒体设备配置情况。

一、调试网络通道

使用一台式电脑充当流媒体服务器,采用有线方式接入局域网,IP地址注意采用静态分配,不要用DHCP;电视采用无线接入,IP可以动态,但是需要能够ping通流媒体服务器,中间不经过NAT。

二、配置EasyDarwin

经过测试,使用RTMP推流时各台电视间音视频延迟差异较大,这是由于RTMP协议采用TCP传输,对网络环境较为敏感;采用RTSP(UDP)推流时效果最好。

流媒体服务器的可选项有很多,除了EasyDarwin外,还有Live555、Nginx(加RTMP插件)、SRS、OBS、VLC、rtsp-simple-server等,其中OBS、VLC都集成了推流组件和服务器,可以不用ffmpeg,单独使用,但是经测试,OBS对RTSP插件支持不是很好;VLC串流在视频循环播放方面存在一些问题,最终选择国产开源的EasyDarwin。

注:也可以采用rtsp-simple-server,rtsp-simple-server没有Web管理,占用系统资源少,网络安全风险小。

1.下载EasyDarwin,根据系统(Win或Linux)选择对应release包

Releases · EasyDarwin/EasyDarwin (github.com)

2.下载完成后解压

使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

(1)EasyDarwin中,RTSP采用默认端口554,可在easydarwin.ini中修改,这里改为8554。

 使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

 (2)运行EasyDarwin.exe即可启动服务

三、配置ffmpeg

FFmpeg是一个跨平台的自由软件,可以用于处理音视频文件。它提供了一组用于处理音视频数据的库和工具,可以对音视频进行解码、编码、转换、截取、合并等操作,支持多种音视频格式。FFmpeg被广泛应用于多媒体相关的应用程序和系统中,包括流媒体服务器、视频编辑软件、播放器等.

搞过音视频开发的同学应该都比较熟悉ffmpeg,相关用法这里不再赘述,这篇文章中主要是使用ffmpeg向EasyDarwin推流,再由EasyDarwin进行调度,将RTSP流分发给电视端播放器。

1.下载ffmpeg,官网选择对应系统版本下载

Download FFmpeg

2.将下载得到的压缩包解压至D:/,将解压出的文件夹重命名为ffmpeg。

3.为了能够在shell中直接调用ffmpeg命令,将“D:\ffmpeg\bin”添加至用户和系统的Path环境变量中。

使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

 4.测试推流

(1)测试前先启动EasyDarwin,参考上一部分

(2)将需要推流的视频文件(video.mp4)放入D:\share\中

(3)打开shell,输入:

ffmpeg -re -stream_loop -1 -i "D:\share\video.mp4" -c copy -f rtsp rtsp://127.0.0.1:8554/live

其中,

  • -re: 以实时模式读取输入文件,即输入流以正常速度读取。
  • -stream_loop -1: 循环播放输入文件,直到手动停止。
  • -i "D:\share\video.mp4": 指定要推送的视频文件的路径。
  • -c copy: 不进行任何编码或解码操作,直接将原始数据复制到输出流中。如果视频码率较大,需要进行分辨率、帧率压缩等操作。
  • -f rtsp: 指定输出流的格式为RTSP,默认使用UDP传输数据流,TCP传输控制流。
  • rtsp://127.0.0.1:8554/live: 指定输出流的URL,由于流媒体服务器和ffmpeg在一台终端上,此处可以使用127.0.0.1;如果是分开的,这里的IP需要改为运行EasyDarwin的机器的IP

 命令执行后,最下方出现跳动的帧率和时间,证明已成功推出流给EasyDarwin。此时在EasyDarwin界面中能够看到session start,可访问EasyDarwin的Web界面 http://127.0.0.1:10008/查看详细信息。

使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

四、智能电视安装VLC进行拉流

经过测试,在安卓智能电视(小米电视)中,OPlayer和VLC(使用v3.5.4 Beta版本,其余版本测试安装不成功)都可以实现稳定的RTSP拉流播放,但是需注意以下问题:

  • 如果你只需要实现单个视频循环播放,oplayer就够用。
  • 如果你需要实现多个视频周而复始地循环播放(列表循环),可以使用下一部分中的脚本,此时需要配合使用VLC播放器,并在VLC中设置循环模式为单个视频循环(点击视频右下角三个点,将“循环模式”点亮),该设置可记忆,设置一次即可(OPlayer中虽然也能设置循环,但是退出播放后无法记忆循环模式,每次都需要操作,较为麻烦)

注:VLC在安卓智能电视上默认为TV版UI,流媒体播放模块隐藏较深,不利于快捷操作,可使用以下方法改进

(1)使用无线键鼠,将接收模块插入智能电视USB口

(2)VLC中:设置>界面>去掉勾选“Android TV 界面”,此时需要使用鼠标拖动滑块才能更改设置

(1)如果你使用的是VLC,在VLC中:更多>新建串流  输入上一部分中配置的RTSP地址,此时需要将上步中的127.0.0.1替换为流媒体服务器在网络中的IP。如,流媒体服务器IP为172.16.0.2,端口为8554,路径为/live

rtsp://172.16.0.2:8554/live

(2)如果你使用的是OPlayer,操作类似,不再赘述

五、推流命令优化

我们在第四步中测试推流时使用的命令没有进行音视频编码操作,当推流源文件分辨率/帧率/码率较大时,可能会因网络及设备性能原因造成卡顿,甚至完全不能播放。

下面给出一个在生产环境中测试通过的推流命令,该命令限制了最大分辨率为1920×1080、帧率为25fps、平均码率为1500K,编码质量预设使用faster,以避免播放高清视频时出现卡顿。

ffmpeg -re -stream_loop -1 -i "D:\share\video.mp4" -vf "scale=w=min(1920\,iw):h=min(1080\,ih):force_original_aspect_ratio=decrease,fps=25" -c:v libx264 -preset faster -tune zerolatency -vb 1500K -f rtsp rtsp://127.0.0.1:8554/tv

其中,增加了以下参数来对原先的推流命令进行优化

  • -vf  参数:应用视频过滤器

  • -c:v libx264 参数:指定视频编码器为 libx264。

  • -preset faster 参数:设置编码速度和压缩比例之间的平衡。-preset有多个可选项,可根据具体环境进行调节,这里使用faster。

  • -tune zerolatency 参数:设置编码器的参数以降低延迟。

  • -vb 1500K 参数:设置视频比特率为 1500Kbps。

注1:

-vf 参数中指定了以下选项scale=w=min(1920\,iw):h=min(1080\,ih):force_original_aspect_ratio=decrease,fps=25

其中:

  • scale :将输入视频缩放到指定的大小。wh 表示输出视频的宽度和高度,min 函数用于选择最小值,以确保输出视频的宽高比与输入视频保持一致。
  • force_original_aspect_ratio :指定缩放后的视频宽高比与输入视频相同。
  • decrease :指示在缩放时可以缩小视频的大小,但不能增加大小。
  • fps :指定输出视频的帧率为 25fps。

注2:

-preset参数的可选项有:

  • ultrafast - 最快的预设,牺牲视频质量以实现更快的编码速度。
  • superfast - 更快的预设,适用于需要更快编码速度但可以接受轻微质量损失的情况。
  • veryfast - 较快的预设,适用于需要更快编码速度但需要保持较高视频质量的情况。
  • faster - 快速的预设,适用于需要更快编码速度但需要保持高质量的情况。
  • fast - 适度快速的预设,适用于需要保持良好视频质量但需要更快编码速度的情况。
  • medium - 默认预设,用于平衡编码速度和视频质量。
  • slow - 较慢的预设,用于需要更高视频质量但可以接受更慢编码速度的情况。
  • slower - 更慢的预设,用于需要更高视频质量但需要更慢编码速度的情况。
  • veryslow - 最慢的预设,用于需要最高视频质量但可以接受最慢编码速度的情况

六、附录:列表循环脚本、桌面直播推流脚本

在某些应用场景中,需要循环播放多个宣传视频,或者推流本地电脑桌面,使用麦克风直播等,此时编写powershell脚本操作ffmpeg即可,下面给出脚本:

1.循环播放多个视频(列表循环)

# 设置视频文件夹路径
$folderPath = "D:\share\"

# 查找支持的视频文件格式
$supportedExtensions = ".mp4",".m4a",".3gp",".flv",".mov"

# 获取所有支持的视频文件
$videoFiles = Get-ChildItem -Path $folderPath -File | Where-Object {$_.Extension -in $supportedExtensions}

# 显示即将推流的文件列表
echo $videoFiles 

# 获取视频文件数量
$videoCount = $videoFiles.Count

# 判断视频文件数量
if ($videoCount -eq 1) {
  # 只有一个视频文件
  ffmpeg -re -stream_loop -1 -i $($videoFiles.FullName) -vf "scale=w=min(1920\,iw):h=min(1080\,ih):force_original_aspect_ratio=decrease,fps=25" -c:v libx264 -preset faster -tune zerolatency -vb 1500K -f rtsp rtsp://127.0.0.1:8554/live
  
} elseif ($videoCount -ge 2) {
  # 有多个视频文件
  $currentIndex = 0
  do {
    $currentVideo = $videoFiles[$currentIndex]
    $nextIndex = ($currentIndex + 1) % $videoCount
    $nextVideo = $videoFiles[$nextIndex]

    ffmpeg -re -i $($currentVideo.FullName) -vf "scale=w=min(1920\,iw):h=min(1080\,ih):force_original_aspect_ratio=decrease,fps=25" -c:v libx264 -preset faster -tune zerolatency -vb 1500K -f rtsp rtsp://127.0.0.1:8554/live

    # 计算下一个视频的索引
    $currentIndex = $nextIndex
  } while ($true)
}

将以上脚本存为.ps1文件,右键选择“使用PowerShell运行”即可实现目标文件夹中所有视频文件循环推流播放,注意,此时要使用VLC进行拉流并设置循环模式(见上一步),同时执行脚本前需要先运行EasyDarwin。需要更新视频源文件时,将视频文件放入D:\share\目录中,将该脚本关闭后重新运行即可。

2.推流电脑桌面,音频使用电脑麦克风输入,适用于直播课等场景。

ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -vcodec libx264 -preset ultrafast -tune zerolatency -acodec aac -f rtsp rtsp://127.0.0.1:8554/live

其中,audio="麦克风 (Realtek High Definition Audio)"需替换为你电脑的音频输入设备名称。如果不知道名称,可以使用

ffmpeg -list_devices true -f dshow -i dummy

来列出所有可用的音频输入设备。

 文章来源地址https://www.toymoban.com/news/detail-494737.html

到了这里,关于使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

    在这篇文章中,我将详述如何搭建一个RTMP(Real-Time Messaging Protocol)服务器,并使用ffmpeg技术进行本地视频的推流。最后,我们将使用VLC播放器来播放这个RTMP流。 首先,我们需要搭建一个RTMP服务器。为了方便起见,我们将选择Docker作为服务器的环境。Docker的轻量化和可移植

    2024年01月17日
    浏览(56)
  • linux+nginx-http-flv-module+ffmpeg实现搭建简易流媒体服务器将rtsp流转flv格式在web端和微信小程序实时播放监控视频

    一.介绍背景 公司项目开发需求:将海康摄像头的rtsp流在web端及微信小程序端进行播放。之前我写过一篇关于web端使用webtrc+videojs播放rtsp流的文章,确实能够解决web端播放rtsp流的需求,但是这次多加了一个微信小程序....所以要考虑小程序的播放问题。本着探索实践的精神在

    2024年02月08日
    浏览(73)
  • 搭建SRS流媒体服务器

    一、获取 SRS git clone https://github.com/ossrs/srs cd srs/trunk 二、编译SRS ./configure make 三、编写SRS配置文件(我的这个文件是原始的,未修改) vim conf/srs.conf 四、启动SRS ./objs/srs -c conf/srs.conf 五、启动ip摄像头进行推流 手机下载一个ip摄像头软件,然后设置中修改RTMP推流地址 rtmp://你的阿里

    2024年02月16日
    浏览(48)
  • 学着搭建流媒体服务器

    操作系统:NAME=\\\"openEuler\\\",架构:aarch64,CPU 运行模式:64-bit 目前有多个开发源代码可以搭建流媒体服务,但要先依赖gcc和cmake,所以首先安装gcc和cmake,查了一通资料,cmake安装记录如下: 1、依赖环境安装 yum -y install libyaml libyaml-devel python-setuptools libcurl-devel python-devel gmp gmp

    2024年02月11日
    浏览(52)
  • 搭建家庭影音媒体中心 --公网远程连接Jellyfin流媒体服务器

    转载自远程穿透的文章:【智能家居】Home Assistant入门安装并内网穿透实现远程安全控制 Home Assistant(以下简称HA)是个开源的智能家居平台,也叫家庭助手,就像一个软件,比如我们的QQ软件,微信软件。 Home Assistant把家中的智能家居设备整合到HA中,它能够接入的设备非常的

    2024年02月01日
    浏览(62)
  • SRS流媒体服务器——Forward集群搭建和源码分析

    Forward集群原理 RTMP流转发(Forward)部署实例 Forward集群源码分析 Forward 表示向前、前头的、发送等意思。 在SRS中可以理解为把Master节点获得直播流⼴播(转发)给所有的Slave节点,master节点由多少路直播流,那么在每个slave节点也会多少路直播流。 注:在SRS中还有另外⼀种集

    2023年04月11日
    浏览(100)
  • 基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频

    目录 1.获取RTSP地址 2.搭建流媒体服务器 2.1下载资源 下载nginx  下载rtmp组件  启动nginx 测试工具(由于java代码调试问题,所以这里先下载一个转码推流的工具,其中javacv的原理也是它)可忽略  下载VLC(测试视频是否成功)  2.2测试向流媒体服务器推流 3.转码  4.查看监控数

    2024年02月06日
    浏览(85)
  • 使用Nginx搭建流媒体

    参考地址 安装 ffmpeg 1、下载安装ffmpeg 2、安装依赖 3、编译安装 ffmpeg 4、创建全局链接 5、验证 安装nginx 1、下载依赖包 2、 解压安装nginx 3、配置启动脚本 4、修改 nginx.conf 文件 在原有的nginx.conf 文件中 server 里面增加如下配置 5、 启动 nginx 6、上传视频测试验证 参数说明 022

    2024年02月07日
    浏览(52)
  • 流媒体服务器SRS的搭建及QT下RTMP推流客户端的编写

        目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca。这几种的对比如下: (本图来源:https://www.ngui.cc/zz/1781086.html?action=onClick)     SRS(Simple Real-time Server)是一个开源的流媒体服务器,它支持RTMP、HLS、HTTP-FLV等多种流媒体协议

    2024年02月11日
    浏览(48)
  • 基于Nginx+rtmp搭建支持hls协议的点播流媒体服务器(windows/Linux)

    前言:公司最近因为客户端视频文件过大导致视频加载时间很长,让我将视频播放做成流媒体点播的形式,于是查阅了几十篇相关文章以及文档,最终将功能实现。可能是存在版本差异,绝大部分文章介绍的教程并不能成功实施,尤其是点播功能,所以我把我工作中验证成功

    2024年02月02日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包