首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >问:导致ffmpeg垃圾邮件的Bash脚本无限循环

问:导致ffmpeg垃圾邮件的Bash脚本无限循环
EN

Stack Overflow用户
提问于 2017-07-06 20:45:55
回答 2查看 397关注 0票数 0

似乎想不出这件事...我有一个带出色的RTMP扩展的NGINX服务器,一切都很好。但是,我正在尝试回流/推送两个特定流的副本,这些流需要在另一个RTMP流应用程序中流式传输(具体地说,这些流被流式传输到应用程序“静态”,但在当前情况下也需要推送到“实时”)。在NGINX-RTMP中回流/推流的过程相对简单,然而,在我的例子中,我需要有选择地推送几个流,而不是每个流都“静态”地流到应用程序。

我的想法是让NGINX-RTMP将流名称传递给bash脚本,然后bash脚本在不中断任何其他流或服务的情况下执行重流。

在一些成功的情况下,我尝试通过创建bash脚本来做到这一点。

运行bash脚本的相关NGINX配置位是:

代码语言:javascript
运行
复制
exec_publish /etc/nginx/rtmp_conf.d/stream_id.sh $name;

我试着用"if / else“

代码语言:javascript
运行
复制
if [ $1 == "stream_name_1" ]; then
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_1 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_0
elif [ $1 == "stream_name_2" ]; then
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_2 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_1
elif [ $1 == "stream_name_3" ]; then
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_3 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_2
elif [ $1 == "stream_name_4" ]; then
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_4 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_3
else
        echo "FAIL" >> /etc/nginx/rtmp_conf.d/stream.log && echo date > /etc/nginx/rtmp_conf.d/stream.log
        exit
fi

我用开关试了试

代码语言:javascript
运行
复制
case "$1" in
        "stream_name_1")
            ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_1 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_0
        ;;
        "stream_name_2")
            ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_2 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_1
        ;;
        "stream_name_3")
            ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_3 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_2
        ;;
        "stream_name_4")
            ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_4 -vcodec libx264 -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_3
        ;;
        echo "FAIL " >> /etc/nginx/rtmp_conf.d/stream.log && echo date > /etc/nginx/rtmp_conf.d/stream.log
esac

两者的问题都是它们最终都会给大量的ffmpeg进程发送垃圾邮件...我也不知道为什么--我试着修改代码,但结果要么是ffmpeg根本没有触发,要么就是给服务器发了垃圾邮件。

EN

回答 2

Stack Overflow用户

发布于 2017-07-07 01:15:11

需要更多信息。

ffmpegs是怎么说的?

你检查过1美元了吗?

我想看看完整的剧本。

票数 0
EN

Stack Overflow用户

发布于 2017-07-07 03:28:45

事实证明,在我的情况下,ffmpeg不喜欢参数标志"-vcodec x264“(奇怪,因为源流是用x264编码的,但是哦,好吧),将其改为使用”复制“音频和视频编解码器解决了我的问题-- ffmpeg不再产生数十个进程,每个进程都试图使用异常的资源量。

在我的例子中,工作代码的示例如下:

为了启动bash脚本,我将此代码放在我的NGINX配置中(根据RTMP模块的设计,它会将传入的流名传给bash脚本):

代码语言:javascript
运行
复制
 exec_publish /etc/nginx/rtmp_conf.d/stream_id.sh $name;

使用开关:

代码语言:javascript
运行
复制
#!/bin/bash
case "$1" in
    "stream_name_1")
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_1 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_0
    ;;
    "stream_name_2")
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_2 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_1
    ;;
    "stream_name_3")
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_3 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_2
    ;;
    "stream_name_4")
        ffmpeg -re -i rtmp://127.0.0.1:2000/static/stream_name_4 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_3
    ;;
esac

并使用If/Else:

代码语言:javascript
运行
复制
#!/bin/bash
if [ $1 == "stream_name_1" ]; then
    ffmpeg -re -i rtmp://127.0.0.1:2000/static/$1 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_0
elif [ $1 == "stream_name_2" ]; then
    ffmpeg -re -i rtmp://127.0.0.1:2000/static/$1 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_1
elif [ $1 == "stream_name_3" ]; then
    ffmpeg -re -i rtmp://127.0.0.1:2000/static/$1 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_2
else [ $1 == "stream_name_4" ]; then
    ffmpeg -re -i rtmp://127.0.0.1:2000/static/$1 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:2000/live/live_3
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44949290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档