首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rtmp上发送的FLV视频包与ffmpeg对OBS流

在rtmp上发送的FLV视频包与ffmpeg对OBS流
EN

Stack Overflow用户
提问于 2018-09-11 22:39:30
回答 1查看 1.2K关注 0票数 0

我使用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文件格式)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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是帧型..。X == 1用于关键帧(I帧),X == 2用于支持P/B帧.
  • Y是编解码型..。Y == 7用于编解码H.264 (MPEG)。

您将注意到,在您的FFmpeg生成的FLV中,Y编解码器类型是2。默认情况下,FFmpeg用索伦森火花编解码器输出FLV (图像质量很低)。

要让FFmpeg在FLV中输出H264,请使用-c:v libx264,例如:

代码语言:javascript
复制
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数据包含正确的数据吗例如:

输入播放器/解码器..。

  • 一个FLV头,后面跟着
  • A/V元数据(决议、FPS、持续时间等)。

然后应该是(单个帧)..。

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

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

另外,您的音频是否以MP3格式发送?这是我能想象你的“音频播放很好”的唯一方法,因为MP3帧每个都有自己的头,这样的数据可能在发送给播放机的字节中被识别(例如: player忽略未知字节,但理解MP3部分,因此对扬声器进行解码)。与ADTS报头一起发送的AAC音频也可能工作,但ADTS报头不应该在媒体容器内(不是FLV、MP4或AVI)。

(3)我建议您下载用于操作系统的十六进制编辑器(如果使用HxD,请尝试HxD)。

比较来自FFmpeg和OBS的两个FLV文件的字节。寻找一个典型的结构像..。

(这是FLV头和元数据):

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52285075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档