gpt4 book ai didi

nginx - 流式传输实时视频和仅将音频中继到 icecast2 服务器

转载 作者:行者123 更新时间:2023-12-04 13:19:33 25 4
gpt4 key购买 nike

我有一个正常工作的 nginx 服务器,它允许我从我们的移动制作系统流式传输实时视频。我们在单独的服务器上也有一个广播电台,并希望向两者进行流式传输。但我无法让它工作,也无法获得任何日志或错误信息来解释原因。我已经尝试过 nginx config 和 FFMPEG 来尝试解决这个问题。

我尝试了各种尝试,使用我认为我从其他在线页面了解的内容:

exec_push FFREPORT=file=ffreport.log:level=48 ffmpeg -i $basename.flv -vn -acodec mp3 rtmp://source:********!!@xxx.xxx.xxx.180:8000/live;

还尝试在 nginx conf 中使用简单的 restream:
application restream {
live on;
exec_push ffmpeg -i $basename.flv -vn -acodec mp3 rtmp://source:***********@xxx.xxx.xxx.180:8000/live;
# push server2:1935
}

我在 Mixxx Live Broadcast Connection 上使用了相同的信息来获取详细信息,以为我在 icecast2 服务器上问同样的事情。只是来源是nginx服务器。

这是 nginx 的完整配置文件
rtmp {

server {
listen 1935;
chunk_size 4000;

application live {
live on;
allow publish 127.0.0.1;
allow publish all;
allow play all;
record all;
record_path /usr/local/nginx/flv-streams;
record_unique on;
exec_record_done ffmpeg -i $basename.flv /usr/local/nginx/html/streams/$basename.mp4;
hls on;
hls_nested on;
hls_path /mnt/hls;
hls_fragment 1s;
hls_sync 1ms;
#exec_push FFREPORT=file=ffreport.log:level=48 ffmpeg -i $basename.flv -vn -acodec mp3 rtmp://source:*************@xxx.xxx.xxx.xxx:8000/live;
}
# Video on Demand
application streams {
play /usr/local/nginx/html/streams/;
}

# Restream
application restream {
live on;
exec_push ffmpeg -i $basename.flv -vn -acodec mp3 rtmp://source***************@xxx.xxx.xxx:8000/live;
# push server2:1935
}

}

我想要那些可以通过视频观看任何广播的人,但如果他们只能像 radio 一样收听,我希望他们通过我们的 radio 播放器收听。它们是两个不同的流,在不同的服务器上。

目前我正在使用软件流式传输到两者,并希望防止这种情况发生。

用我自己的措辞,也许没有找到关于如何做到这一点的任何想法。

更新

在 TBR 的帮助下,我设法将 Nginx 服务器的流传输到托管 icecast2 的新服务器。然而,并非以预期的方式。它的速度提高了 32 倍,因此不是流本身。
ffmpeg -i fcpr-1554651146.flv -vn -c:a mp3 icecast://source:password@10.0.0.0:8000/fcprlive.mp3

但是,我想知道我是否一直以错误的方式思考这个问题。在我的 liquidsoap 文件中,我有以下代码:
 #!/usr/bin/liquidsoap
# Log dir set("log.file.path","/tmp/basic-radio.log")
# Music
myplaylist = mksafe(playlist("/home/offlineftp/playlist"))

#Live Source
set("harbor.bind_addr","0.0.0.0")
live = input.http("http://localhost:8000/fcprlive")
radio = fallback(track_sensitive=false, [live,plist])

# Stream it out
output.icecast(%mp3, host = "localhost", port = 8000,
password = "pass", mount = "/fcpr")

我是否应该考虑使用 LiquidSoap 从 Nginx 中提取流,在直播时,如果没有信号而不是去回退?

最佳答案

据我所见,您有一个 Nginx 服务器可以连续写入“flv”文件。

我建议一点一点地接近这一点。

1. 将 FFmpeg 命令原型(prototype)化,该命令将流式传输到 Nginx 之外的 Icecast 以避免混淆

您要做的就是验证您可以成功地将音频从静态视频文件流式传输到 Icecast 并收听。它很可能看起来像这样:
ffmpeg -i test.flv -vn -c:a libopus icecast://source:password@icecast.example.org:8000/teststream.opus或在 MP3 的情况下ffmpeg -i test.flv -vn -c:a mp3 icecast://source:password@icecast.example.org:8000/teststream.mp3
您可能需要根据您的需要进一步自定义它,但它应该让您了解如何开始。

2. 集成到您的 Nginx 设置中

然后,您可以将其放入您的 Nginx 配置中,并弄清楚如何确保它可以在写入和执行 flv 文件时读取它。
对于调试,您可能希望通过附加 2>&1 >/tmp/ffmpeg-icecast.log 来重定向 STDOUT 和 STDERR听从你的命令。

关于nginx - 流式传输实时视频和仅将音频中继到 icecast2 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55496251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com