nginx - RTMP Nginx exec_push 与 alaw 和 h264
问题描述
我有 2 个 RTMP 服务器,一个带有 RTMP 模块的 NGINX,第二个只能使用带有 H264 和 ALAW 的 RTMP,它将接收来自 NGINX 的视频。
我使用 Gstreamer 成功地将我的相机图像推送到第二台服务器:
gst-launch-1.0 v4l2src device="/dev/video0" ! videoconvert ! video/x-raw,format=I420 ! x264enc speed-preset=ultrafast tune=zerolatency key-int-max=20 ! flvmux name=flvmux ! rtmpsink location=rtmp://<second_server_ip>:1935/publish/foobar audiotestsrc ! alawenc ! flvmux.
现在,我需要将视频从 NGINX 服务器发送到第二台服务器,但它需要具有 H264 视频编码和 ALAW 音频编码。
我又尝试了一个中间步骤,将流式传输到 NGINX 服务器并运行
gst-launch-1.0 rtmpsrc location=rtmp://<nginx_ip>:1935/live/100 ! videoconvert ! video/x-raw,format=I420 ! x264enc speed-preset=ultrafast tune=zerolatency key-int-max=20 ! flvmux name=flvmux ! rtmpsink location=rtmp://<second_server_ip>:1935/publish/foobar audiotestsrc ! alawenc | flvmux.
但我得到了
Setting pipeline to PAUSED ...
pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstRTMPSrc:rtmpsrc0: Internal data stream error.
Additional debug info:
gstbasesrc.c(3072): gst_base_src_loop (): /GstPipeline:pipeline0/GstRTMPSrc:rtmpsrc0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
我在 GStreamer 命令中缺少什么?以及如何将其添加到 NGINX 应用程序以自动推送接收到的流?如果需要,我可以使用 FFmpeg 进行操作。
谢谢
编辑:
我的第一台服务器将接收来自移动应用程序的流。此服务器(NGINX)配置如下:
application live {
live on;
interleave on;
}
该服务器应该推送到第二个服务器(用 Go 编写),它将 RTMP 转换为 WebRTC,以便我可以在浏览器中播放流。正如我之前所说,我已经使用 GStreamer 成功地将 RTMP 流式传输到第二台服务器,但我希望第一台服务器自动推送到第二台服务器,而这正是我能够做到的推送。
编辑2:
我用过VLC,编码是H264,所以没问题。但是我确实需要 ALAW 而不是 MPEG AAC 音频,当我将它推送到第二台服务器时,如何在 NGINX 服务器上进行更改?
解决方案
推荐阅读
- c++-cx - 如何将带有取消的 C++/CX create_task 转换为等效的 C++/WinRT 代码?
- css - 有没有办法获得两列布局(是否弯曲),其中列缩小到最小元素
- reactjs - 我怎么能在 useState React 中发送 setStateAction
- ruby-on-rails - 如何使用 Hotwire 和 Turbo.js 访问 current_user 助手?
- python - Google Places API,如何获得下 20 个结果?
- r - 如何使用变量作为ggplot的参数?
- javascript - 从选择元素中选择选项时,控制台日志加倍
- javascript - 使用 JavaScript 获取 textarea 值并将其插入到地图上
- ios - 如何在烛台图表的蜡烛顶部和底部绘制自定义视图
- sql - 访问数据库。VBA 查询