纤维Fibre 2024-08-02 16:20 采纳率: 64.3%
浏览 30
已结题

FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放

FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放
Ubuntu 24.04

leo@leo-devp:~$ uname -a
Linux leo-devp 6.8.0-39-generic #39-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul  5 21:49:14 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

我参考了下面这一教程:tutorial利用 Nginx 搭建 RTMP 服务器,然后成功地进行了 FFmpeg 推流。以下是 nginx.conf 文件:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                deny publish all;

                application live {
                        live on;
                        record off;
                        allow play all;
                }
        }
}

这是推流的控制台输出:

ffmpeg -re -i bejeweled.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/stream
ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bejeweled.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    description     : Bilibili VXCode Swarm Transcoder v0.7.43
  Duration: 00:03:18.39, start: 0.000000, bitrate: 424 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 352 kb/s, 23.98 fps, 23.98 tbr, 16k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 65 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x58b1ca9cee80] using SAR=1/1
[libx264 @ 0x58b1ca9cee80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x58b1ca9cee80] profile High, level 3.0, 4:2:0, 8-bit
[libx264 @ 0x58b1ca9cee80] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=11 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=23 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmp://127.0.0.1/live/stream':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    description     : Bilibili VXCode Swarm Transcoder v0.7.43
    encoder         : Lavf60.16.100
  Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 1k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
  Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 aac
frame=    0 fps=0.0 q=0.0 size=       1kB time=00:00:00.60 bitrate=   7.2kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:01.11 bitrate=   3.9kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:01.62 bitrate=   2.7kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:02.13 bitrate=   2.0kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:02.62 bitrate=   1.7kbits/sframe=    6 fps=2.2 q=28.0 size=       6kB time=00:00:03.15 bitrate=  16.2kbits/...

但是当我使用 ffplay 或者 VLC 尝试播放时,就会陷入一直在等待的状态。以下是控制台输出:

leo@leo-devp:~$ ffplay rtmp://127.0.0.1/live/stream
ffplay version 6.1.1-3ubuntu5 Copyright (c) 2003-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
leo@leo-devp:~$ 0 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0

这是 /var/log/nginx/access.log 的内容:

127.0.0.1 [02/Aug/2024:14:56:38 +0800] PUBLISH "live" "stream" "" - 415 529 "" "FMLE/3.0 (compatible; Lavf60.16" (0s)
127.0.0.1 [02/Aug/2024:14:59:59 +0800] PUBLISH "live" "stream" "" - 10501019 529 "" "FMLE/3.0 (compatible; Lavf60.16" (3m 18s)
127.0.0.1 [02/Aug/2024:15:01:21 +0800] PLAY "live" "stream" "" - 401 490 "" "LNX 9,0,124,2" (4m 35s)
127.0.0.1 [02/Aug/2024:15:09:49 +0800] PUBLISH "live" "stream" "" - 2733579 529 "" "FMLE/3.0 (compatible; Lavf60.16" (52s)
127.0.0.1 [02/Aug/2024:15:10:15 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (54s)
127.0.0.1 [02/Aug/2024:15:11:52 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (17s)
127.0.0.1 [02/Aug/2024:15:13:24 +0800] PLAY "live" "stream" "" - 393 472 "" "LNX 9,0,124,2" (3m 5s)
127.0.0.1 [02/Aug/2024:15:13:24 +0800] PUBLISH "live" "stream" "" - 23343914 529 "" "FMLE/3.0 (compatible; Lavf60.16" (3m 18s)
127.0.0.1 [02/Aug/2024:15:13:39 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (10s)
127.0.0.1 [02/Aug/2024:15:15:48 +0800] PLAY "live" "stream" "" - 393 472 "" "LNX 9,0,124,2" (3m 34s)

/var/log/nginx/error.log 中没有任何相关记录。

本机防火墙信息:

eo@leo-devp:~$ sudo ufw stat
3306/tcp                   ALLOW       Anywhere                  
1935/tcp                   ALLOW       Anywhere                  
19355/tcp                  ALLOW       Anywhere                  
19355                      ALLOW       Anywhere                  
1935                       ALLOW       Anywhere                  
3306/tcp (v6)              ALLOW       Anywhere (v6)             
1935/tcp (v6)              ALLOW       Anywhere (v6)             
19355/tcp (v6)             ALLOW       Anywhere (v6)             
19355 (v6)                 ALLOW       Anywhere (v6)             
1935 (v6)                  ALLOW       Anywhere (v6)

执行ffmpeg rtmp://127.0.0.1/live/streamffprobe rtmp://127.0.0.1/live/stream均是卡住静止,也不会报错

请你指出我哪里做的不对以及如何改正,感谢。

  • 写回答

11条回答 默认 最新

  • 专家-皆知 2024-08-02 18:12
    关注

    引自皆我百晓生小程序:

    根据你提供的信息,可能有几个原因导致无法用ffplay或VLC播放推流:

    1. 检查FFmpeg推流时的参数是否正确。你可以尝试使用以下命令推流,看看是否有改善:
    ffmpeg -re -i bejeweled.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/stream
    
    1. 检查Nginx RTMP服务器配置是否正确。确保在nginx.conf文件中配置的RTMP服务器端口(1935)正确,并且允许播放所有流。

    2. 检查防火墙设置。确保端口1935(RTMP)已被允许通过防火墙,以确保流可以正常传输。

    3. 检查网络连接。确保本地网络连接正常,没有任何问题导致无法连接到RTMP服务器。

    4. 尝试使用不同的播放器。除了ffplay和VLC,你还可以尝试其他播放器来播放RTMP流,以确定问题是否与特定播放器有关。

    如果以上步骤都没有解决问题,请尝试调试FFmpeg和Nginx的日志,查看是否有任何错误或警告信息。希望这些信息对你有帮助,祝你顺利解决问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月3日
  • 修改了问题 8月2日
  • 修改了问题 8月2日
  • 创建了问题 8月2日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?