发布网友 发布时间:2024-10-10 02:42
共1个回答
热心网友 时间:9分钟前
1. 环境搭建
提取PCM与yuv文件用于RTMP测试。PCM与yuv文件需自行准备,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秒范围,时间戳与时间戳差值表示。
在实际项目中,优化时间戳计算以减少帧间隔误差。
文章结束,希望对您有所帮助。