我使用node-media-server npm模块托管我的rtmp服务器。我从服务器上捕获了视频包,我注意到用ffmpeg -f gdigrab -offset_x 1920 -framerate 60 -video_size hd1080 -i desktop -crf 0 -preset ultrafast -f flv rtmp://localhost流的视频包开始于
2200 0085或2200 0084和1200 0085,和1200 0084开头。当我用OBS流到rtmp服务器时,我捕获以
2701 0000 0000 00和1701 0000 0000开头。我想要做的是捕获这些数据包,存储它,并在它们连接到我的服务器时将这些数据包发送给“播放器”。我让它处理用ffmpeg捕获的数据包和用ffmpeg转换成flv格式的视频。
然而,播放器不播放与OBS流的视频包。然而,当我的rtmp服务器只是“中继”它接收到的内容而不是“重放”捕获的数据包时,播放机就会玩得很好。但音频播放得很好。
我想知道那些启动十六进制表示什么(它是否表示OBS没有使用flv文件格式)。
发布于 2018-09-15 03:40:00
(1)
"...And当我用OBS流到RTMP服务器时,我捕获以
27 01 00 00 00 00 00和17 01 00 00 00 00开头我想知道那些启动十六进制代表什么(它是否表示OBS没有使用FLV文件格式)。“
这些字节值对于FLV格式是正确的(参见:FLV结构下的视频编码部分 )。
假设数据包以字节XY 01 00 00开头..。
X == 1用于关键帧(I帧),X == 2用于支持P/B帧.Y == 7用于编解码H.264 (MPEG)。您将注意到,在您的FFmpeg生成的FLV中,Y编解码器类型是2。默认情况下,FFmpeg用索伦森火花编解码器输出FLV (图像质量很低)。
要让FFmpeg在FLV中输出H264,请使用-c:v libx264,例如:
ffmpeg -f gdigrab -offset_x 1920 -framerate 60 -video_size hd1080 -i desktop -c:v libx264 -crf 0 -preset ultrafast -f flv rtmp://localhost(2)
“然而,玩家不播放OBS流的视频包。”
我想OBS的意思是开放广播软件?是否有方法提供一个短样本输出FLV文件进行分析?或者,尝试捕获流进程发送的每个字节(按显示顺序)。如果我是一个播放器/解码器,从您的RTMP链接中接收到的第一个100+字节是什么?
你能确定发送给玩家的FLV数据包含正确的数据吗例如:
输入播放器/解码器..。
然后应该是(单个帧)..。
09...,直到27 01 00 00... etc)。基本上,确保FLV数据是正确的工作。玩家对音频编解码器有什么看法?
另外,您的音频是否以MP3格式发送?这是我能想象你的“音频播放很好”的唯一方法,因为MP3帧每个都有自己的头,这样的数据可能在发送给播放机的字节中被识别(例如: player忽略未知字节,但理解MP3部分,因此对扬声器进行解码)。与ADTS报头一起发送的AAC音频也可能工作,但ADTS报头不应该在媒体容器内(不是FLV、MP4或AVI)。
(3)我建议您下载用于操作系统的十六进制编辑器(如果使用HxD,请尝试HxD)。
比较来自FFmpeg和OBS的两个FLV文件的字节。寻找一个典型的结构像..。
(这是FLV头和元数据):
46 4C 56 01 01 00 00 00 09 00 00 00 00 12 00 01 FLV.............
25 00 00 00 00 00 00 00 02 00 0A 6F 6E 4D 65 74 %..........onMet
61 44 61 74 61 08 00 00 00 0C 00 08 64 75 72 61 aData.......dura
74 69 6F 6E 00 40 46 D9 99 99 99 99 9A 00 05 77 tion.@FÙ™™™™š..w
69 64 74 68 00 40 77 00 00 00 00 00 00 00 06 68 idth.@w........h
65 69 67 68 74 00 40 75 00 00 00 00 00 00 00 0D eight.@u........
76 69 64 65 6F 64 61 74 61 72 61 74 65 00 40 8A videodatarate.@Š
0B F6 00 00 00 00 00 09 66 72 61 6D 65 72 61 74 .ö......framerat
65 00 40 48 1A 20 84 C4 02 3E 00 0C 76 69 64 65 e.@H. „Ä.>..vide
6F 63 6F 64 65 63 69 64 00 40 1C 00 00 00 00 00 ocodecid.@......然后音频/视频帧被打包到AV标记中(数据开始于09如果视频,08如果音频):
09 XX XX XX XX XX XX 00 00 00 00接帧数据27 01 00 00 XX 00 00 XX XX XX XX etc
https://stackoverflow.com/questions/52285075
复制相似问题