标签: rtmp

Nginx RTMP 不录音

我已经在 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)

php linux record nginx rtmp

7
推荐指数
1
解决办法
1万
查看次数

如何让ffmpeg在rtmp输入流结束时退出?

我正在使用 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

当我停止源流时会暂停。没有日志输出表明源流已退出。

ffmpeg rtmp

7
推荐指数
0
解决办法
502
查看次数

从命令行打开 VLC 时设置自定义标题

我从 java 程序启动 VLC 来播放 rtmp 流。我想将窗口标题设置为“stream-1”之类的内容,而不是 rtmp url,因为它不会告诉我有关内容的任何信息。

我目前正在使用它在 VLC 中启动流

vlc.exe -vvv "rtmp url"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以从命令行设置标题吗?

vlc stream rtmp

6
推荐指数
1
解决办法
6211
查看次数

RTMP自适应比特率算法

我在网上搜索但是关于这个的信息非常少.

我有一个实时广播应用程序,我通过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)

streaming android rtmp mediacodec

6
推荐指数
1
解决办法
853
查看次数

Fmmpeg 可以将 webrtc MediaStream 转码为 rtmp 吗?

我的目标是混合 webrtc 和 rtmp 流。

是否可以将 WEBRTC MediaStream 转换为 RTMP ?

ffmpeg rtmp webrtc

6
推荐指数
0
解决办法
628
查看次数

ExoPlayer 无法播放 Adob​​e 实时流编码器流式传输的音频/视频 (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)

android rtmp live-streaming exoplayer2.x

6
推荐指数
1
解决办法
1237
查看次数

如何在ffmpeg中同步多个rtsp输入?

我正在使用 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)

ffmpeg rtmp

6
推荐指数
1
解决办法
2232
查看次数

将视频从 OBS 流式传输到在 heroku 上运行并使用 node-media-server 的 rtmp 服务器

我一直在使用 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 …

heroku rtmp node.js reactjs

6
推荐指数
1
解决办法
2931
查看次数

我们如何在 react js 中流式传输 rtmp url?

我需要在我的 reactjs 应用程序中集成 RTMP 播放器。我正在获取用于流式传输的 rtmpUrl 并尝试使用 react 播放器,但它不支持 rtmp url。

rtmp reactjs react-player

6
推荐指数
0
解决办法
989
查看次数

将 esp-32 摄像头流式传输到 RTMP 服务器(例如 YouTube)

我正在为一个需要使用相机流的项目进行研究。经过多次搜索和谷歌搜索后,我还没有找到直接将 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

c arduino nginx rtmp esp32

6
推荐指数
1
解决办法
7433
查看次数