ffmpeg - 为什么我会收到 testsrc ffmpeg 的输入/输出错误?
问题描述
我正在尝试编写一个集成测试,它实际上需要将 RTMP 流式传输到 3rd 方服务。如何使用 ffmpeg 命令生成 RTMP 测试流?似乎是正确的答案,但我无法让它工作。
作为基线,没有 RTMP 也ffmpeg -f lavfi -i testsrc -t 30 -pix_fmt yuv420p test.mp4
可以工作。
ffmpeg -f lavfi -i testsrc -t 30 -pix_fmt yuv420p -f flv rtmp://mylocation
给我错误rtmp://mylocation: Input/output error
我应该注意该 URL 是有效的,否则我会收到一条错误消息,指出它无法打开连接。
我也试过了ffmpeg -f lavfi -i testsrc -pix_fmt yuv420p -f flv rtmp://mylocatiom
。我已经读过,如果您不提供时间,它会永远持续下去,并认为我可能需要将其用于 RTMP 流。我得到了同样的错误。
这是上次尝试的完整输出,添加了下面@Gyan 建议的参数,以及详细的日志记录。
ffmpeg -loglevel verbose -f lavfi -i testsrc -pix_fmt yuv420p -f flv -c:v libx264 -g 50 rtmp://myhost:1935/identifier
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
[Parsed_testsrc_0 @ 0x7fddf34022c0] size:320x240 rate:25/1 duration:-1.000000 sar:1/1
Input #0, lavfi, from 'testsrc':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo, 1 reference frame (RGB[24] / 0x18424752), rgb24, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
[tcp @ 0x7fddf3404880] Starting connection attempt to {theIP} port 1935
[tcp @ 0x7fddf3404880] Successfully connected to {theIP} port 1935
rtmp://myhost:1935/identifier: Input/output error
更新以debug
在错误之前添加更多这样的数据:
[tcp @ 0x7fc4e1601a00] Starting connection attempt to 34.224.30.155 port 1935
[tcp @ 0x7fc4e1601a00] Successfully connected to 34.224.30.155 port 1935
[rtmp @ 0x7fc4e1411200] Handshaking...
[rtmp @ 0x7fc4e1411200] Type answer 3
[rtmp @ 0x7fc4e1411200] Server version 3.0.1.1
[rtmp @ 0x7fc4e1411200] Proto = rtmp, path = /identifier, app = identifier, fname =
[rtmp @ 0x7fc4e1411200] Window acknowledgement size = 2500000
[rtmp @ 0x7fc4e1411200] Max sent, unacked = 2500000
[rtmp @ 0x7fc4e1411200] New incoming chunk size = 4096
[rtmp @ 0x7fc4e1411200] Releasing stream...
[rtmp @ 0x7fc4e1411200] FCPublish stream...
[rtmp @ 0x7fc4e1411200] Creating stream...
[rtmp @ 0x7fc4e1411200] Sending publish command for ''
rtmp://myhost:1935/identifier: Input/output error
Sending publish command for ''
是可疑的,但不知道该怎么做。
解决方案
我没有注意到 -fname
在调试输出中是空白的。我错过了流名称/密钥。我需要做rtmp://myhost:1935/identifier/streamkey
。日志显示我的流名称为空。我一直在复制粘贴没有密钥的 URL,因为我心不在焉地忘记了它 - 我的 OBS 设置为始终具有相同的密钥,但 URL 发生了变化,这就是我一次又一次粘贴的内容。
推荐阅读
- spring-boot - Spring Data MongoDb | 通用模型和存储库
- javascript - Set Y value in pixels in amchart
- flutter - 尽管调用 setState,但单击时 CheckboxListTile 状态未更改
- android - Intent Redirection Vulnerability warning from Play store
- contiki - Contiki-NG RE-Mote 板:收音机一直在收听
- android - how to change timezone without affecting the saved time in currentTimeMillis()?
- android - Getting Album Artwork in flutter
- python - Mutagen 和 Lyrics3v2 的标签
- express - 添加“返回”后“错误 [ERR_HTTP_HEADERS_SENT]:无法在将标头发送到客户端后设置标头”
- greengrass - AWS Greengrass 中的组件未从设备中删除