【问题标题】:How to generate an RTMP test stream using ffmpeg command?如何使用 ffmpeg 命令生成 RTMP 测试流?
【发布时间】:2017-11-14 09:04:31
【问题描述】:

我想通过生成带有时间戳的 RTMP 测试视频来测试我的流媒体基础架构。这可能看起来像screen。形象无所谓。我只关注即时生成的工作流和时间戳。我打算为此目的使用 ffmpeg 工具。该命令可能类似于

$ ffmpeg -i image.png \
    -vf drawtext="fontfile=/Library/Fonts/Arial.ttf: \
        timecode='00\:00\:00\:00': r=1: fontcolor=white: \
        fontsize=24: box=1: boxcolor=black@0.5: \
        boxborderw=5: x=(w-text_w)/2: y=(h-text_h)/2" \
    -f flv rtmp://localhost/live/test

我确实基于 NGINX 及其 RTMP 模块在本地运行 a streaming server

但是,上面的命令给了我以下错误:

Input #0, png_pipe, from 'image.png':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 768x576 [SAR 7874:7874 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> flv1 (flv))
Press [q] to stop, [?] for help
[Parsed_drawtext_0 @ 0x7fb78450ece0] Using non-standard frame rate 1/1
Output #0, flv, to 'rtmp://localhost/live/test':
  Metadata:
    encoder         : Lavf57.71.100
    Stream #0:0: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 768x576 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.89.100 flv
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
[flv @ 0x7fb785812a00] Failed to update header with correct duration.
[flv @ 0x7fb785812a00] Failed to update header with correct filesize.
frame=    1 fps=0.0 q=8.6 Lsize=      50kB time=00:00:00.00 bitrate=406016.0kbits/s speed=0.019x
video:49kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.451271%

流媒体服务器按预期运行。问题出在命令上。有人可以帮助我吗?

【问题讨论】:

  • 由于您的输入是未循环的图像,因此它只是一帧。尝试将-loop 1 放在-i image.png 之前
  • @Mulvya 感谢您的提示。现在很明显我错过了什么!

标签: ffmpeg video-streaming rtmp


【解决方案1】:

ffmpeg 有testsrc 可以用作测试源输入流:

ffmpeg -r 30 -f lavfi -i testsrc -vf scale=1280:960 -vcodec libx264 -profile:v baseline -pix_fmt yuv420p -f flv rtmp://localhost/live/test

-r、缩放、轮廓等只是一个示例,可以省略/播放。重点是使用-i testsrc

【讨论】:

  • 我怀疑-r 30 正在做任何事情,而您的示例正在放大原始的testsrc 大小为320x240。您可以在 testsrc 本身中设置帧速率和视频大小:testsrc=r=30:s=1280x960。考虑添加-re 输入选项来模拟实时输入流:否则它将尝试尽可能快地编码。
  • ffmpeg -f lavfi -i testsrc -t 30 -pix_fmt yuv420p test.mp4 为我工作。我在您的示例地址之前减去了额外的-if。添加失败。回到 RTMP 领域,我尝试了这个:ffmpeg -f lavfi -i testsrc -t 30 -pix_fmt yuv420p -f flv rtmp://mylocation 我得到了错误:rtmp://mylocation: Input/output error。有什么想法吗?
  • umm...为什么当我停止在终端中运行此命令时,流中的数字会继续增长?浏览器播放器确实检测到似乎停止信号但继续获取流?
猜你喜欢
  • 2020-10-24
  • 2017-08-20
  • 1970-01-01
  • 2012-01-06
  • 2021-03-15
  • 2013-03-21
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多