gpt4 book ai didi

nginx 推 rtmp 流到 ffmpeg

转载 作者:行者123 更新时间:2023-12-04 17:22:15 24 4
gpt4 key购买 nike

在带有摄像头模块的 Raspberry Pi 上,我尝试设置一个基于网络的流媒体平台。我想在我的浏览器中预览流并使用 CGI 脚本开始/停止向 youtube 广播 (,...)。

到目前为止,这是我进行流媒体设置的方式:

enter image description here

Nginx 提供了一个 RTMP 应用 webcam。这是我将使用 ffmpeg 发送相机和音频流的地方。它将流发布为 Web 预览的 HLS。它还将流推送到另一个应用程序 source。这就是我想(偶尔)连接另一个 ffmpeg 进程以广播到 youtube (,...) RTMP 端点的地方。

我像这样使用 ffmpeg 启动流:

ffmpeg -loglevel debug -f v4l2 -framerate 15 -video_size 1280x720 -input_format h264 -i /dev/video0 -f alsa -i hw:2 -codec:v copy -g 15 -codec:a aac -b:a 128k -ar 44100 -strict experimental -f flv "rtmp://localhost:1935/webcam/hhart"

目前一切正常。我可以在我的网站上使用 video.js 查看器预览 HLS 流(也由 nginx 提供服务)。

现在我想启动另一个 ffmpeg 进程来广播到我的 youtube channel ,像这样连接到 source 应用程序:

ffmpeg -loglevel debug -f flv -listen 1 -i rtmp://localhost:1935/source/hhart -c copy 'rtmp://a.rtmp.youtube.com/live2/<KEY>'

(在最后的设置中,启动和终止这个进程将通过 CGI 脚本完成)

这是 ffmpeg 返回的内容:

Opening an input file: rtmp://localhost:1935/source/hhart.
[flv @ 0x2032480] Opening 'rtmp://localhost:1935/source/hhart' for reading
[rtmp @ 0x2032a10] No default whitelist set
[tcp @ 0x20330f0] No default whitelist set

然后……没有任何反应。 Youtube 工作室没有流,但也没有错误消息。

我做的其他一些测试:

  1. webcam 应用程序,直接推送到有效的 Youtube RTMP =>! (但这不是我想要的,因为我希望HLS流一直在线,但只有在我要直播时才广播。)

  2. 从 VLC 在 rtmp://localhost:1935/source/hhart 显示流 => 类似于 ffmpeg,没有错误消息,进度条一直在加载。

所以我的印象是发生了什么,但没有实际数据传输。

nginx.conf 中的 RTMP 部分:

rtmp {                                                                     
server {
listen 1935;
chunk_size 4000;

application webcam {
live on;
hls on;
hls_path /Services/Webcam/HLSStream;
hls_fragment 3;
hls_playlist_length 60;
#deny play all;
push rtmp://localhost:1935/source/;
#push rtmp://a.rtmp.youtube.com/live2/<KEY>;
}

application source {
live on;
record off;
}
}
}

当然,我可能完全走错了路,所以欢迎提出如何更好地实现我的要求的任何建议!

最佳答案

好的,我用 --with-debug 重新编译了 nginx,这让我找到了解决方案。

我必须将流推送到另一个端口上的 RTMP 地址,而不是将流推送到另一个应用程序,然后第二个 ffmpeg 进程可以在那里获取它。并且使用 127.0.0.1 代替 localhost 似乎更好。

像这样:

rtmp {                                                                     
server {
listen 1935;
chunk_size 4000;

application webcam {
live on;
hls on;
hls_path /Services/Webcam/HLSStream;
hls_fragment 3;
hls_playlist_length 60;
#deny play all;
push rtmp://127.0.0.1:1936/test/; # ADDED
record off;
}
}
}

启动到 youtube 的广播:

ffmpeg -loglevel debug -f flv -listen 1 -i rtmp://127.0.0.1:1936/test/ -c copy -f flv 'rtmp://a.rtmp.youtube.com/live2/<KEY>'

现在我的 HLS 流始终在线,我可以通过启动/终止第二个 ffmpeg 进程来控制向 youtube 的广播。

关于nginx 推 rtmp 流到 ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65530588/

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