搜索

流媒体推拉流实战之RTMP协议分析(BAT面试官推荐)

发布网友 发布时间:2024-10-10 02:42

我来回答

1个回答

热心网友 时间:9分钟前

1. 环境搭建


提取PCM与yuv文件用于RTMP测试。PCM与yuv文件需自行准备,yuv文件体积庞大,若不再使用,可删除。提取命令如下:



提取PCM数据:ffmpeg -i xxx.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
提取yuv数据:ffmpeg -i xxx.mp4 -an -c:v rawvideo -pix_fmt yuv420p 720x480_25fps_420p.yuv

在qt下进行rtmp_play工程时,确保使用了正确编译器,否则可能导致编译失败。


识别头部与数据,根据字段进行区分。


深入理解FLV格式。


详解MP4与TS合成音视频。


RTMP推流具有低延时特性。


注意SDL在子线程预览时可能存在的稳定性问题,先屏蔽界面显示部分,便于调试。


RTMP简介:应用层协议,专为Flash player与服务器间传输音视频、控制命令。


RTMP播放流程:TCP三次握手建立连接,RTMP握手认证,连接建立,创建流,播放/推流命令,删除流。


TCP三次握手完成,客户端与服务器建立可靠网络连接。


创建流后,播放客户端发送“play”命令,服务器响应配置信息。


使用wire分析数据包。


音视频开发资源推荐:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发。


【文章福利】:提供学习资源群文件,需自行添加。


推流流程:TCP与RTMP握手后,推流客户端发送连接控制字,服务器响应带宽等信息。


注意输入rtmpt而非rtmp进行Wireshark抓包。


了解具体包信息与规格。


推流客户端发送服务器rtmp握手c0、c1包,服务器回应s0、s1、s2,客户端再发送c2。


复杂握手包含公共密钥与密文。


连接地址示例:rtmp://192.168.121.31/live/36,应用实例区分功能。


创建流命令用于建立传输通道,返回唯一Stream ID。


play命令启动音视频传输。


deleteStream命令用于删除指定流。


RTMP数据流向分析。


传输流程:消息拆包、网络发送与接收。


发送端:封装数据、拆包传输。


接收端:组包恢复数据。


切包原因:适应网络带宽,防止数据阻塞。


RTMP数据发送流程涉及协议、封装、编码。


RTMP数据接收流程:TCP接收、封装解封装、解码。


消息结构:协议控制、数据与命令消息。


Chunk数据结构:携带不同数据流类型与消息类型。


RTMP Chunk Header长度变长,提供数据效率。


Chunk Stream ID用于区分同一消息。


拆分消息以避免大消息阻塞。


优先级管理:控制消息优先级最高,视频消息优先级最低。


RTMP时间戳单位为毫秒,相对值表示,支持49天17小时2分钟47.296秒范围,时间戳与时间戳差值表示。


在实际项目中,优化时间戳计算以减少帧间隔误差。


文章结束,希望对您有所帮助。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top