流媒体
文章平均质量分 91
流媒体技术的思考与使用方式
东城山
一名视频技术工程师的思考与心得
展开
-
【流媒体】基于libRTMP的H264推流器
前面记录了RTMP协议相关的内容,本文记录如何使用libRTMP库进行推流,推流的内容是本地H264码流,向RTMP服务器(nginx)进行推流,并且在传输之后使用ffplay进行拉流播放,主要参考了雷博的实现方式,但根据自己的理解进行了代码简化,加上了自己的理解和注释。在修改过程中,直接使用了雷博提供的libRTMP库,没有自己编译,这一点可能得后续再看看。原创 2024-08-20 16:38:56 · 896 阅读 · 0 评论 -
【流媒体】RTMPDump—AMF编码
在看RTMPDump代码过程中,发现一个比较核心的地方还没有记录,即AMF编码。RTMP协议的数据很多都是以AMF格式进行编码的,也应该做重点记录。参考RTMPDump代码中的amf.c和amf.h两个文件。由于AMF编码会将数据转换成为大端存储,可以参考。原创 2024-08-19 09:52:30 · 734 阅读 · 0 评论 -
【流媒体】RTMPDump—Download(接收流媒体信息)
在进行流连接之后,还可以进行传输过来数据的下载,执行这一功能的函数是Download(),其中使用RTMP_Read()读取数据,随后使用fwrite写入文件。写入文件通常是FLV格式,如果没有指定这个file,则会默认写到stdout。原创 2024-08-16 14:16:19 · 345 阅读 · 0 评论 -
【流媒体】RTMPDump—RTMP_ConnectStream(创建流连接)
RTMP_ConnectStream()的作用是建立流连接,先回顾一下RTMP标准文档当中是如何进行流的连接的,以client向server发送play命令为例,流程图如下所示。现在假设状态为client向server发送了av_connect命令,server会给予一个反馈,client会根据这个反馈去进行下一步的操作,此时会调用RTMP_SendCreateStream()函数发送av_createStream命令,RTMP_SendCreateStream()函数定义如下。(2)解析packet。原创 2024-08-16 14:15:04 · 1138 阅读 · 0 评论 -
【流媒体】RTMPDump—RTMP_Connect函数(握手、网络连接)
前面进行了RTMPDump主流程的分析,包括初始化和一些解析过程,现在分析RTMPDump是如何进行握手和网络连接,这是进行RTMP通信的第一步。原创 2024-08-16 14:12:56 · 1182 阅读 · 0 评论 -
【流媒体】RTMPDump—主流程简单分析
main函数的流程如下所示,代码还是比较长的,主要可以分为8个步骤:(1)初始化socket(InitSockets)(2)初始化RTMP(RTMP_Init)(3)解析URL(RTMP_ParseURL)(4)配置流信息(RTMP_SetupStream)(5)建立网络连接(RTMP_Connect)(6)建立流连接(RTMP_ConnectStream)(7)流媒体下载(Download)(8)清理和释放(free、RTMP_Close和CleanupSockets)原创 2024-08-16 14:07:23 · 1479 阅读 · 0 评论 -
【流媒体】RTMP协议的消息类型
不得不说RTMP协议比之前看到的RTP协议要复杂很多,其中涉及到的数据格式和控制方式要更多。前面记录了RTMP协议的主要流程和数据格式,本文记录RTMP中的消息类型,不同的消息类型决定当前的数据包完成不同的任务,因此是极其重要的内容。原创 2024-08-14 16:38:25 · 1063 阅读 · 0 评论 -
【流媒体】RTMP协议的数据格式
在RTMP协议中,定义的数据格式称为消息(Message),消息是网络传输的数据载体,其中会携带RTMP协议命令、用户控制命令和传输的数据等等,是client和server之间进行交流通信的核心RTMP消息分为2个部分:RTMP Message Header和RTMP Message Payload原创 2024-08-13 15:50:25 · 752 阅读 · 0 评论 -
【流媒体】基于RTP协议的H264码流发送器和接收器
RTP(Real-time Transport Protocol,实时传输协议)是一种网络协议,用于在IP网络上传输实时数据,如音频、视频等。它的主要目的是提供一种可靠的、面向数据包的传输机制,以支持实时多媒体应用。无连接RTP协议本身不保证数据的可靠传输,它只是负责将数据包从发送端发送到接收端,而不关心数据包是否按顺序到达或者是丢失面向数据包RTP协议适用于传输数据包,而不是连续的数据流。这意味着它可以处理任意大小的数据包,而不需要预先建立连接时间戳。原创 2024-08-01 15:39:42 · 735 阅读 · 0 评论 -
【流媒体】RTMP协议概述
RTMP(Real-Time Message Protocol)协议是由Adobe公司提出的一种专为实时音视频数据传输设计的专用网络协议,主要用于流媒体传输领域,如直播、在线视频播放等等。RTMP协议基于TCP,是一种有数据传输保障的协议,默认使用1935号端口,支持多种数据格式和传输方式,从而适用于不同的应用场景。RTMP能够应用于Windows、macOS、Linux、Android和iOS等不同的操作系统,进行高效的音视频数据传输。熟悉RTMP协议,可以阅读官方的文档,这里我参考的是中文翻译:[R原创 2024-08-13 09:36:52 · 969 阅读 · 0 评论 -
【流媒体】基于RTP协议的H264播放器
前面记录了一篇基于RTP协议的H264的推流器、接收器的实现过程,但是没有加上解码播放,这里记录一下如何实现解码和播放,也是在前面的基础之上实现的。前一篇的记录为【开源项目】基于RTP协议的H264码流发送器和接收器在前文中,接收器将接收到的一系列数据包进行解析,并分成了一个个完整的帧,存储在内存之中。下面要将这些完整的帧进行解码成为yuv,并且播放。因此,需要添加解码和播放部分的代码。原创 2024-08-02 17:20:05 · 740 阅读 · 0 评论