通过rtmp发送的FLV视频数据包使用ffmpeg和OBS进行流式传输

问题描述 投票:0回答:1

我正在使用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捕获的数据包和使用flv转换为ffmpeg格式的视频。

但是,播放器不播放使用OBS流式传输的视频数据包。但是,当我的rtmp服务器只是“中继”接收的内容而不是“重放”捕获的数据包时,播放器确实能够很好地发挥作用。但音频播放效果很好。

我想知道那些起始十六进制代表什么(是否表明OBS没有使用flv文件格式)。

video ffmpeg rtmp flv
1个回答
2
投票

(1)

“...当我使用OBS流式传输到我的RTMP服务器时,我会捕获以...开头的视频数据包

  • 27 01 00 00 00 00 00
  • 第一个数据包以17 01 00 00 00 00开头

我想知道那些起始十六进制代表什么(它是否表明OBS没有使用FLV文件格式)。“

这些字节值对于FLV格式是正确的(参见:"Video encoding" section under FLV Structure

假设数据包以字节XY 01 00 00开头......

  • X是帧类型... X == 1用于关键帧(I帧),X == 2用于支持P / B帧。
  • Y是编解码器类型... Y == 7用于编解码器H.264(MPEG)。

你会注意到在FFmpeg生成的FLV中,Y编解码器类型是2。默认情况下,FFmpeg使用Sorenson Spark编解码器(具有低图像质量)输出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意味着Open Broadcaster Software?有没有办法提供一个简短的样本输出FLV文件进行分析?或者尝试捕获流处理发送的每个字节(按照出现的顺序)。如果我是播放器/解码器,那么我从RTMP链接收到的前100个字节是多少?

你能确定发送给玩家的FLV数据包含正确的数据,例如:

进入播放器/解码器......

  • 一个FLV标题,然后是
  • A / V元数据(分辨率,FPS,持续时间等)。

然后应该跟(个别框架)......

  • (每帧)包含视频数据包的A / V标记设置(例如:09...直到27 01 00 00... etc)。

基本上确保FLV数据正常工作。玩家对音频编解码器的看法是什么?

您的音频也是以MP3格式发送的吗?这是我可以想象你的“音频播放得很好”的唯一方法,因为MP3帧每个都有自己的标题,这些数据可能会被发送到播放器的字节中识别出来(例如:播放器忽略未知字节但是理解MP3部分,因此解码为发言者)。使用ADTS标头发送的AAC音频也可能有效,但ADTS标头不应该位于媒体容器内(不是FLV,MP4或AVI)。

(3)我建议你为你的操作系统下载一个十六进制编辑器(如果使用Windows,请尝试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     [email protected]
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

© www.soinside.com 2019 - 2024. All rights reserved.