我已经在 DigitalOcean 托管的 ubuntu linux 中设置了 Nginx RTMP。目前在我的桌面上以 localhost 模式运行我的 laravel Web 应用程序。直播似乎一切正常。我正在使用本地主机 JWPlayer 和开放广播软件(OBS)进行实时流媒体测试。有用。但是每当我需要将流媒体视频录制到linux目录(/var/www)时,在我点击OBS中的停止流媒体按钮后,似乎什么也没有发生,也没有任何错误。
我不知道录音是如何进行的,我尝试录制手册,上面有链接。我点击开始录制,它出现 /var/rec/{mystream}.flv
此手动版本的录制链接嵌入在 Laravel 网站中:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
recorder rec1 {
record all manual;
record_suffix all.flv;
record_path /var/rec;
record_unique on;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
开始录音:
<a href="http://server.com/control/record/start?app=live&name=key&rec=rec1" target="_blank">Start rec1</a>
Run Code Online (Sandbox Code Playgroud)
http 的 nginx 配置:
access_log logs/rtmp_access.log;
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; …Run Code Online (Sandbox Code Playgroud) 我正在使用 ffmpeg 对来自本地 nginx rtmp 服务器的流进行转码,并将转码后的媒体发送回同一本地 rtmp 服务器。当流离线时,ffmpeg 保持活动状态。当流再次开始时,ffmpeg 会接手转码工作。
我希望 ffmpeg 在输入 rtmp 流停止时退出,但我找不到配置它来执行此操作。我浏览了手册页和在线文档。
为了完整起见,这些是我当前向 ffmpeg 提供的参数:
ffmpeg -i 'rtmp://localhost/live/ijsbeer' -s '1280x720' -vcodec 'libx264' -preset 'veryfast' -crf '25' -maxrate '2000k' -bufsize '1000.0k' -force_key_frames '0: 00:02' -max_mushing_queue_size '4096' -acodec '复制' -copyts -copytb '0' -f 'flv' 'rtmp://localhost/live/ijsbeer_720p'
让 ffmpeg 退出本身解决了我的两个问题。首先,当流式传输到 rtmp 服务器的编码器(OBS)重新启动时,ffmpeg 有时会遇到非单调的 DTS 问题。其次,我想实现一个基本的监控系统来通知我转码器中的问题。当输入流停止时使 ffmpeg 退出似乎是确定 ffmpeg 是否正在工作的最可靠方法。解析 stderr/stdout 并不可靠,因为没有明确的输出格式。
转码时我收到这些常规 stderr 行:
帧= 241 fps= 30 q=30.0 大小= 38kB 时间=00:00:09.74 比特率= 32.0kbits/s 速度= 1.2x
当我停止源流时会暂停。没有日志输出表明源流已退出。
我从 java 程序启动 VLC 来播放 rtmp 流。我想将窗口标题设置为“stream-1”之类的内容,而不是 rtmp url,因为它不会告诉我有关内容的任何信息。
我目前正在使用它在 VLC 中启动流
vlc.exe -vvv "rtmp url"
Run Code Online (Sandbox Code Playgroud)
有什么方法可以从命令行设置标题吗?
我在网上搜索但是关于这个的信息非常少.
我有一个实时广播应用程序,我通过RTMP堆栈使用Android MediaCodec SDK发送由摄像头和麦克风产生的编码H264视频帧和AAC音频块.
我的直播流是720p,我的目标是2500Kbps的高质量.这显然需要非常好的网络连接,如果您使用数据计划,这意味着4G.
问题是即使连接最大,也会出现低峰值和拥塞,因此网络将无法保持如此沉重的流量.因为我想提供高可靠性,我想在我的应用程序中包含自动自适应比特率,以便降低图像质量或有利于可靠性.
问题是 - 如何实现这种自动适应网络条件而不丢失帧?它甚至可能吗?我使用像Cerevo这样的专业编码设备,他们不会丢帧 - 但是对于我的应用程序,由于p帧在网络中丢失,我总是会受到一些可怕的拖累.
这就是我目前拥有的:
private long adaptBitrate(long idleNanos, Frame frame) {
int bytes = frame.getSize();
long nowNanos = System.nanoTime();
if (nowNanos - mLastNanos > 1000L * 1000 * 1000) {
double idle = (double) idleNanos / (double) (nowNanos - mLastNanos);
float actualBitrate = newBitrate;
int size = mBuffer.size();
String s = "Bitrate: " + actualBitrate / 1000
+ " kbps In-Flight:" + bytes
+ " idle: " + idle;
if …Run Code Online (Sandbox Code Playgroud) 我的目标是混合 webrtc 和 rtmp 流。
是否可以将 WEBRTC MediaStream 转换为 RTMP ?
我正在使用在服务器端Adobe Live Stream Encoder流式传输RTMP实时音频。在我的 android 客户端应用程序中,ExoPlayer使用 RTMP 扩展无法播放它并导致RtmpIOException但我可以使用 VLC 或 MPC 播放它。
我用其他一些RTMP链接测试了我的 android 应用程序,它是好的。
我还在手机中安装的其他视频播放器(MxPlayer、Vlc)中使用了这个 url,它没问题。
这是android中播放视频的代码:
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
//Create the player
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
playerView.setPlayer(player);
MediaSource videoSource = null;
Uri uri = Uri.parse("rtmp://172.18.49.6/live/11");
dataSourceFactory = new RtmpDataSourceFactory();
videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
.createMediaSource(uri);
player.prepare(videoSource);
player.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)
这是例外:
E/ExoPlayerImplInternal: Source error.
net.butterflytv.rtmp_client.RtmpClient$RtmpIOException
at net.butterflytv.rtmp_client.RtmpClient.open(RtmpClient.java:56)
at com.google.android.exoplayer2.ext.rtmp.RtmpDataSource.open(RtmpDataSource.java:60)
at …Run Code Online (Sandbox Code Playgroud) 我正在使用 ffmpeg 将来自本地网络摄像机的多个 rtsp 流组合到单个输出中。在生成的视频中,视频不同步。
ffmpeg -loglevel warning \
-f image2 -loop 1 \
-i logo.png \
-rtsp_transport tcp -thread_queue_size 1024 \
-i "rtsp://10.0.0.1" \
-rtsp_transport tcp -thread_queue_size 1024 \
-i "rtsp://10.0.0.2" \
-rtsp_transport tcp -thread_queue_size 1024 \
-i "rtsp://10.0.0.3" \
-filter_complex "[3:v][2:v][0:v][1:v]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0[v]" \
-map "[v]" \
-filter_complex "[1:a][1:a]amerge=inputs=2[aout]" -map "[aout]" \
-vcodec libx264 -pix_fmt yuv420p -r 30 -g 60 \
-preset fast -b:v 2400k -maxrate 4600k -bufsize 6000k \
-acodec aac -ar 44100 -b:a 128k \
-f flv "rtmp://live-api-s.facebook.com:80/rtmp/$STREAMKEY" …Run Code Online (Sandbox Code Playgroud) 我一直在使用 react、redux、node media server 和 json server 开发这个类似 Twitch 的应用程序。它允许用户通过将他们的 OBS 配置到服务器 URL 来直接流式传输视频/音频,其中 Stream Key 等于在 react 应用程序中创建的流的 ID。可以在您正在查看的流的结束 URL 上找到。
您可以在https://github.com/XorinNebulas/Streamy查看我的完整存储库
您还可以通过https://streamy-app.herokuapp.com/在 Heroku 上查看我当前部署的站点版本
这是我对位于流/rtmpserver/index.js 中的节点媒体服务器的配置
const NodeMediaServer = require("node-media-server");
const HTTP_PORT = process.env.HTTP_PORT || 8000;
const config = {
rtmp: {
port: 1935,
chunk_size: 60000,
gop_cache: true,
ping: 30,
ping_timeout: 60
},
http: {
port: HTTP_PORT,
allow_origin: "*"
}
};
var nms = new NodeMediaServer(config);
nms.run();
Run Code Online (Sandbox Code Playgroud)
在本地运行项目时一切正常,我只需进入我的 OBS 流设置,使用 rtmp://localhost/live 的 URL,Stream Key …
我需要在我的 reactjs 应用程序中集成 RTMP 播放器。我正在获取用于流式传输的 rtmpUrl 并尝试使用 react 播放器,但它不支持 rtmp url。
我正在为一个需要使用相机流的项目进行研究。经过多次搜索和谷歌搜索后,我还没有找到直接将 ESP-32 摄像头流传输到我自己的 RMTP 服务器的解决方案。
已经尝试过的解决方案:
1)我尝试过使用 Raspberry pi 重新串流 ESP-32-cam,效果很好,但不是我想要的东西{由于不想使用 Raspberrypi 进行重新串流而被丢弃}

2)ESP-32-cam:使用时间触发器进行记录和FTP传输(未尝试,但认为这不是一个好方法)。{由于不是实时而被丢弃}
3)ESP32尝试使用HTTPClient将图像文件发送到php我已经尝试过,但它仅适用于图像,其次代码是在循环函数中执行的,因此由于保存和发布操作而存在很长的延迟。
请注意:我没有考虑 ESP-32 cam 作为流服务器并且浏览器可以连接到它的解决方案,如下所示:https: //www.hackster.io/BnBe_Club/9-rtsp-video-streamer-using- the-esp32-cam-board-8832b4

我已经尝试过了,它运行良好,但不适用于涉及流式传输到 RTMP 服务器而不重新流式传输的用例。
**
我想实现 ESP-32 CAM 可以直接发布/流式传输到 RTMP 云托管服务器,技术上似乎是可能的,因为 ESP-32 cam 支持连接 wifi 并访问云服务器
在谷歌上,我发现了类似的线程:https://forum.arduino.cc/index.php?topic =634605.0 topic=634605.0 提供解决方案的人没有兴趣分享它。
下面的代码可能需要一些修改,可以参考: https: //github.com/espressif/esp32-camera