我正在使用 ffmpeg 将 RTSP 流转换为 RTMP 流。然后 RMTP 流将被输入到 Wowza Streaming Engine。我不知道为什么它在一台服务器上运行良好,但在另一台服务器上却失败了。两台服务器位于不同的网络中,但都是 Windows Server 2012,具有相同的 ffmpeg 版本,转换相同的 RTSP 流,但其中一个失败并显示错误消息打开输入流 #0:0 的解码器时出错:处理输入时发现无效数据
我使用的 ffmpeg 命令是:
ffmpeg -v debug -r 7 -i "rtsp://rtsp-stream-source-server/someRtspStream" -frame rate 7 -video_size 800x592 -vcodec libx264 -preset veryfast -maxrate 750k -bufsize 1500k -tune zerolatency -g 14 -an -r 7 -f flv rtmp://wowza-server:1935/app/stream1
我比较了两种情况下的 ffmpeg 调试消息,并注意到以下差异/行为:
对于成功的情况,ffmpeg 首先使用 UDP 打开 RTSP 流,但 UDP 超时,然后使用 TCP 重试。对于失败的情况,似乎使用 UDP 成功,无需使用 TCP 重试。
当ffmpeg成功打开一个RTSP流时,会打印出以下信息表示成功
输入 #0,rtsp,来自‘rtsp://rtsp-stream-source-server/someRtspStream’: 元数据: 标题 :未命名 评论 :N/A 时长:N/A,开始:0.151889,比特率:N/A 流 #0:0、53、1/90000:视频:h264(主)、1 个参考帧、yuvj420p(pc、bt709、逐行、中心)、800x600(800x608)[SAR 1:1 DA R 4:3], 0/1, 6.58 tbr, 90k tbn, 180k tbc 已成功打开文件。
对于失败的情况,将打印出以下信息:
输入 #0,rtsp,来自‘rtsp://rtsp-stream-source-server/someRtspStream’: 元数据: 标题 :未命名 评论 :N/A 时长:N/A,开始:0.151944,比特率:N/A 流 #0:0、28、1/90000:视频:h264(主)、1 个参考帧、yuvj420p(pc、bt709、逐行、中心)、800x600(800x608)[SAR 1:1 DA R 4:3], 0/1, 6.67 tbr, 90k tbn, 180k tbc 已成功打开文件。
请注意“Stream #0:0”后面的数字是不同的。
- 在“Stream Mapping”过程中,失败的情况会出现以下错误信息,然后ffmpeg进程停止:
检测到 4 个逻辑核心 [h264@0000000001c2a9a0]nal_unit_type:8,nal_ref_idc:3 [h264@0000000001c2a9a0]nal_unit_type:7,nal_ref_idc:3 [h264@0000000001c2a9a0]nal_unit_type:8,nal_ref_idc:3 [h264 @ 0000000001c2a9a0] sps_id 0 超出范围 流映射: 流 #0:0 -> #0:0 (h264 (本机) -> h264 (libx264)) 打开输入流 #0:0 的解码器时出错:处理输入时发现无效数据
您对失败案例有什么想法吗?我该如何排除故障?
以下是两种情况下的调试信息
失败案例
打开输入文件:rtsp://rtsp-stream-source-server/someRtspStream。 [tcp @ 00000000004b8740] 未设置默认白名单 [rtsp@0000000001c2ba00] SDP: v=0 o=-1509095634684735 1 在 IP4 192.168.63.139 s=未命名 我=N/A t=0 0 a=tool:LIVE555 流媒体 v2011.08.20 a=类型:广播 a=控制:* a=范围:npt=0- a=x-qt-text-nam:未命名 a=x-qt-text-inf:N/A m=视频 0 RTP/AVP 96 c=输入 IP4 0.0.0.0 乙=AS:15000 一个=rtpmap:96 H264/90000 a=控制:轨道1 无法解析间隔结束规范'' [rtsp @ 0000000001c2ba00] 视频编解码器设置为:h264 [rtp @ 00000000004b8b40] 未设置默认白名单 [udp @ 00000000004ba420] 未设置默认白名单 [udp @ 00000000004ba420] 已设置“circular_buffer_size”选项,但此版本不支持该选项(需要 pthread 支持) [udp @ 00000000004ba420] 报告的结束接收缓冲区大小为 65536 [udp @ 0000000001c3d160] 未设置默认白名单 [udp @ 0000000001c3d160] 已设置“circular_buffer_size”选项,但此版本不支持该选项(需要 pthread 支持) [udp @ 0000000001c3d160] 报告的结束接收缓冲区大小为 65536 [rtsp @ 0000000001c2ba00] 将抖动缓冲区大小设置为 500 [rtsp @ 0000000001c2ba00]你好状态=0 无法解析间隔结束规范'' [h264 @ 00000000004b8d40] sps_id 0 超出范围 [AVBSFContext @00000000004bd160] nal_unit_type:0,nal_ref_idc:0 [AVBSFContext @ 00000000004bd160] nal_unit_type:8,nal_ref_idc:3 [AVBSFContext @00000000004bd160] nal_unit_type:0,nal_ref_idc:0 [AVBSFContext @ 00000000004bd160] nal_unit_type:7,nal_ref_idc:3 [AVBSFContext @00000000004bd160] nal_unit_type:0,nal_ref_idc:0 [AVBSFContext @ 00000000004bd160] nal_unit_type:8,nal_ref_idc:3 [AVBSFContext @00000000004bd160] nal_unit_type:0,nal_ref_idc:0 [AVBSFContext @00000000004bd160] nal_unit_type:5,nal_ref_idc:3 [AVBSFContext @00000000004bd160] nal_unit_type:0,nal_ref_idc:0 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264@00000000004b8d40]nal_unit_type:8,nal_ref_idc:3 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264@00000000004b8d40]nal_unit_type:7,nal_ref_idc:3 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264@00000000004b8d40]nal_unit_type:8,nal_ref_idc:3 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264@00000000004b8d40]nal_unit_type:5,nal_ref_idc:3 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264 @ 00000000004b8d40] sps_id 0 超出范围 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) 最后一条消息重复了 2 次 [h264 @ 00000000004b8d40] 将上下文重新初始化为 800x608,pix_fmt:yuvj420p [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264@00000000004b8d40]nal_unit_type:1,nal_ref_idc:2 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264@00000000004b8d40]nal_unit_type:1,nal_ref_idc:2 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264@00000000004b8d40]nal_unit_type:1,nal_ref_idc:2 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264@00000000004b8d40]nal_unit_type:1,nal_ref_idc:2 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264@00000000004b8d40]nal_unit_type:1,nal_ref_idc:2 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [h264@00000000004b8d40]nal_unit_type:1,nal_ref_idc:2 [h264@00000000004b8d40]nal_unit_type:0,nal_ref_idc:0 [h264 @ 00000000004b8d40] 未知 NAL 代码:0(0 位) [rtsp @ 0000000001c2ba00] 找到所有信息 [rtsp@0000000001c2ba00] rfps:6.500000 0.018292 [rtsp@0000000001c2ba00] rfps:6.583333 0.006178 最后一条消息重复了 1 次 [rtsp@0000000001c2ba00] rfps:6.666667 0.004542 [rtsp@0000000001c2ba00] rfps:6.750000 0.013386 [rtsp@0000000001c2ba00] rfps:13.250000 0.016201 [rtsp@0000000001c2ba00] rfps:13.333333 0.018170 输入 #0,rtsp,来自‘rtsp://rtsp-stream-source-server/someRtspStream’: 元数据: 标题 :未命名 评论 :N/A 时长:N/A,开始:0.151944,比特率:N/A 流 #0:0、28、1/90000:视频:h264(主)、1 个参考帧、yuvj420p(pc、bt709、逐行、中心)、800x600(800x608)[SAR 1:1 DA R 4:3], 0/1, 6.67 tbr, 90k tbn, 180k tbc 已成功打开文件。 解析一组选项:输出url rtmp://wowza-server:1935/app/stream1。 应用选项 vcodec(强制视频编解码器('copy' 以复制流))和参数 libx264。 应用选项 an(禁用音频)和参数 1。 应用选项 r(设置帧速率(Hz 值、分数或缩写))和参数 7。 应用选项 f(强制格式)和参数 flv。 成功解析一组选项。 打开输出文件:rtmp://wowza-server:1935/app/stream1。 [rtmp@00000000023c0ec0]未设置默认白名单 正在解析... 解析协议:0 解析主机:127.0.0.1 解析的应用程序:vdc RTMP_Connect1, ... 已连接,握手 握手:输入答案:03 HandShake:服务器正常运行时间:96850052 握手:FMS 版本:3.0.1.1 握手:握手完成.... RTMP_Connect1,握手 RTMP_SendPacket: fd=516, 大小=88 0000:03 00 00 00 00 00 58 14 00 00 00 00 ......X..... 0000:02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00...连接。?.... 0010:00 00 00 03 00 03 61 70 70 02 00 03 76 64 63 00 ......应用...vdc。 0020:04 74 79 70 65 02 00 0a 6e 6f 6e 70 72 69 76 61.类型...非隐私 0030:74 65 00 05 74 63 55 72 6c 02 00 19 72 74 6d 70 te..tcUrl...rtmp 0040:3a 2f 2f 31 32 37 2e 30 2e 30 2e 31 3a 31 39 33 ://127.0.0.1:193 0050:35 2f 76 64 63 00 00 09 5/vdc… 调用 connect RTMP_ReadPacket: fd=516 0000:02 00 00 00 00 00 04 05 00 00 00 ............ 0000:00 26 25 a0 .&%。 HandleServerBW:服务器 BW = 2500000 RTMP_ReadPacket: fd=516 0000:02 00 00 00 00 00 05 06 00 00 00 ............ 0000:00 26 25 a0 02 .&%.. HandleClientBW: 客户端BW = 2500000 2 RTMP_ReadPacket: fd=516 0000:02 00 00 00 00 00 06 04 00 00 00 ............ 0000:00 00 00 00 00 00...... HandleCtrl,收到 ctrl。类型:0,长度:6 HandleCtrl,流开始 0 RTMP_ReadPacket: fd=516 0000:02 00 00 00 00 00 04 01 00 00 00 ............ 0000:00 00 02 00 .... HandleChangeChunkSize,已接收:块大小更改为 512 RTMP_ReadPacket: fd=516 0000:03 00 00 00 00 01 05 14 00 00 00 00 ............ 0000:02 00 07 5f 72 65 73 75 6c 74 00 3f f0 00 00 00 ...结果?.... 0010:00 00 00 03 00 06 66 6d 73 56 65 72 02 00 0e 46......fmsVer...F 0020:4d 53 2f 33 2c 35 2c 37 2c 37 30 30 39 00 0c 63 MS/3,5,7,7009..c 0030:61 70 61 62 69 6c 69 74 69 65 73 00 40 3f 00 00 能力。@?.. 0040:00 00 00 00 00 04 6d 6f 64 65 00 3f f0 00 00 00 ......模式。?.... 0050:00 00 00 00 00 09 03 00 05 6c 65 76 65 6c 02 00.........级别.. 0060:06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 1d.状态..代码... 0070:4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f NetConnection.Co 0080:6e 6e 65 63 74 2e 53 75 63 63 65 73 73 00 0b 64 nnect.成功.d 0090:65 73 63 72 69 70 74 69 6f 6e 02 00 15 43 6f 6e 说明...Con 00a0:6e 65 63 74 69 6f 6e 20 73 75 63 63 65 65 64 65 连接成功 00b0:64 2e 00 04 64 61 74 61 08 00 00 00 00 00 07 76 d...数据.......v 00c0:65 72 73 69 6f 6e 02 00 0a 33 2c 35 2c 37 2c 37 版本...3,5,7,7 00d0:30 30 39 00 00 09 00 08 63 6c 69 65 6e 74 69 64 009.....客户端 ID 00e0:00 41 d6 2d 2b 68 80 00 00 00 0e 6f 62 6a 65 63 .A.-+h.....对象 00f0:74 45 6e 63 6f 64 69 6e 67 00 00 00 00 00 00 00 t编码....... 0100:00 00 00 00 09..... RTMP_ClientPacket,已接收:调用261字节 (对象开始) 财产: 财产: 财产: (对象开始) 财产: 财产: 财产: (对象结束) 财产: (对象开始) 财产: 财产: 财产: 财产: (对象开始) 财产: (对象结束) 财产: 财产: (对象结束) (对象结束) HandleInvoke,服务器调用 HandleInvoke,接收方法调用的结果 RTMP_SendPacket: fd=516, 大小=33 0000:43 00 00 00 00 00 21 14 C......!. 0000:02 00 0d 72 65 6c 65 61 73 65 53 74 72 65 61 6d…释放流 0010:00 40 00 00 00 00 00 00 00 05 02 00 04 6e 74 74 [电子邮件保护] 0020:31 1 调用 releaseStream RTMP_SendPacket: fd=516, 大小=29 0000:43 00 00 00 00 00 1d 14 C...... 0000:02 00 09 46 43 50 75 62 6c 69 73 68 00 40 08 00...FCPublish.@.. 0010:00 00 00 00 00 05 02 00 04 6e 74 74 31 .........ntt1 调用 FCPublish RTMP_SendPacket: fd=516, 大小=25 0000:43 00 00 00 00 00 19 14 C....... 0000:02 00 0c 63 72 65 61 74 65 53 74 72 65 61 6d 00…创建流。 0010:40 10 00 00 00 00 00 00 05 @........ 调用 createStream RTMP_ReadPacket: fd=516 0000:03 00 00 00 00 00 88 14 00 00 00 00 ............ 0000:02 00 0b 6f 6e 46 43 50 75 62 6c 69 73 68 00 00...onFCPublish.. 0010:00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c ...........级别 0020:02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02...状态..代码。 0030:00 17 4e 65 74 53 74 72 65 61 6d 2e 50 75 62 6c ..NetStream.Publ 0040:69 73 68 2e 53 74 61 72 74 00 0b 64 65 73 63 72 ish.开始.描述 0050:69 70 74 69 6f 6e 02 00 19 46 43 50 75 62 6c 69 选项...FCPubli 0060:73 68 20 74 6f 20 73 74 72 65 61 6d 20 6e 74 74 sh 到流 ntt 0070:31 2e 00 08 63 6c 69 65 6e 74 69 64 00 41 d6 2d 1 ...clientid.A.- 0080:2b 68 80 00 00 00 00 09 +h...... RTMP_ClientPacket,已接收:调用136字节 (对象开始) 财产: 财产: 属性:NULL 财产: (对象开始) 财产: 财产: 财产: 财产: (对象结束) (对象结束) HandleInvoke,服务器调用 RTMP_ReadPacket: fd=516 0000:03 00 00 00 00 00 1d 14 00 00 00 00 ............ 0000:02 00 07 5f 72 65 73 75 6c 74 00 40 10 00 00 00..._结果.@.... 0010:00 00 00 05 00 3f f0 00 00 00 00 00 00 ......?....... RTMP_ClientPacket,已接收:调用 29 字节 (对象开始) 财产: 财产: 属性:NULL 财产: (对象结束) HandleInvoke,服务器调用 HandleInvoke,接收方法调用的结果 RTMP_SendPacket: fd=516, 大小=34 0000:04 00 00 00 00 00 22 14 01 00 00 00 ......”..... 0000:02 00 07 70 75 62 6c 69 73 68 00 40 14 00 00 00...发布。@.... 0010:00 00 00 05 02 00 04 6e 74 74 31 02 00 04 6c 69 .......ntt1...li 0020:76 65 是 调用发布 RTMP_ReadPacket: fd=516 0000:02 00 00 00 00 00 06 04 00 00 00 ............ 0000:00 00 00 00 00 01…… HandleCtrl,收到 ctrl。类型:0,长度:6 HandleCtrl,流开始 1 RTMP_ReadPacket: fd=516 0000:03 00 00 00 00 00 7c 14 01 00 00 00 ......|...... 0000:02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00...状态... 0010:00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 ........级别... 0020:73 74 61 74 75 73 00 04 63 6f 64 65 02 00 17 4e 状态..代码...N 0030:65 74 53 74 72 65 61 6d 2e 50 75 62 6c 69 73 68 etStream.发布 0040:2e 53 74 61 72 74 00 0b 64 65 73 63 72 69 70 74.开始.描述 0050:69 6f 6e 02 00 10 50 75 62 6c 69 73 68 69 6e 67 ion...出版 0060:20 6e 74 74 31 2e 00 08 63 6c 69 65 6e 74 69 64 ntt1 ...客户端ID 0070:00 41 d6 2d 2b 68 80 00 00 00 00 09 .A.-+h...... RTMP_ClientPacket,接收:调用124字节 (对象开始) 财产: 财产: 属性:NULL 财产: (对象开始) 财产: 财产: 财产: 财产: (对象结束) (对象结束) HandleInvoke,服务器调用 HandleInvoke,状态:NetStream.Publish.Start 已成功打开文件。 检测到 4 个逻辑核心 [h264@0000000001c2a9a0]nal_unit_type:8,nal_ref_idc:3 [h264@0000000001c2a9a0]nal_unit_type:7,nal_ref_idc:3 [h264@0000000001c2a9a0]nal_unit_type:8,nal_ref_idc:3 [h264 @ 0000000001c2a9a0] sps_id 0 超出范围 流映射: 流 #0:0 -> #0:0 (h264 (本机) -> h264 (libx264)) 打开输入流 #0:0 的解码器时出错:处理输入时发现无效数据 [AVIOContext @ 000000000239a360] 统计信息:0 次搜索,0 次写出 RTMP_SendPacket: fd=516, 大小=31 0000:43 00 00 00 00 00 1f 14 C....... 0000:02 00 0b 46 43 55 6e 70 75 62 6c 69 73 68 00 40...FC取消发布。@ 0010:18 00 00 00 00 00 00 05 02 00 04 6e 74 74 31..........ntt1 调用 FCUnpublish RTMP_SendPacket: fd=516, 大小=34 0000:43 00 00 00 00 00 22 14 C......”。 0000:02 00 0c 64 65 6c 65 74 65 53 74 72 65 61 6d 00…删除流。 0010:40 1c 00 00 00 00 00 00 05 00 3f f0 00 00 00 00 @.........?...... 0020:00 00…… 调用 deleteStream