精华内容
下载资源
问答
  • rtmp协议
    2022-07-26 19:37:45

    今天,我们来聊聊 RTMP 和 HLS 协议。

    1.RTMP

    RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。

    ◆ 应用层协议,依靠TCP保证可靠传输。rtsp基于udp传输。

    ◆ 默认端口:1935,可能被防火墙屏蔽。

    ◆ 在流媒体/交互服务器之间进行音视频和数据通信。

    2.HLS(HTTP Live Streaming)

    HLS是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。

    它的工作原理是把整个流分成一个个小的基于HTTP的TS文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

    HLS请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

    HLS规范:

    ◆ 视频的封装格式是TS。

    ◆ 音视频采用H264编码和AAC编码。

    ◆ 除了TS视频文件本身,还定义了用来控制播放的m3u8索引文件。

    3.对比RTMP,HLS和HTTP-FLV

    根据应用场景不同,流媒体协议分为:

    ◆ 推流协议。 摄像机等推流到服务器。

    ◆ 拉流播放协议。手机等从服务器拉流。

    RTMP可以用在双端,即是推流又是拉流,HLS用在拉流端,HTTP-FLV用在拉流端。

    我们先放一张表格从几个维度来对比下这三种协议。

    本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓私信或文章底部领取↓↓

    (1)RTMP & HTTP-FLV区别

    ◆ 这两个协议实际上传输的数据是一样的,数据都是flv文件的tag。

    ◆ RTMP:实时播放服务器的 FLV 文件或服务器转发的FLV数据,本地无 FLV 缓存文件,FLV保密性好。

    ◆ HTTP-FLV:将 FLV 下载到本地再播放,FLV保密性不好。

    (2)HLS & RTMP

    ◆ RTMP:采用1935端口,而非HTTP80端口,在某些网络环境下可能被屏蔽。

    ◆ RTMP:是一种有状态协议,需要为每一个播放视频流的客户端维护状态,服务器平滑扩展难度大。

    ◆ HLS:基于无状态HTTP协议,客户端只需要按顺序使用下载的TS文件就可,负载均衡如同普通的HTTP文件服务器负载均衡一样。

    (3)HTTP-FLV

    HTTP-FLV 结合了 RTMP 和 HLS 的优点,易用(HTTP协议,端口80比rtmp的1935更通用)低延时(flv)

    (4)为什么 RTPM 比 HLS 快

    ◆ HLS拉流:服务器音视频数据切片生成 TS 文件

    ◆ HLS拉流:客户端必须等待服务端至少生成一个 TS 文件,通常下载完两个媒体文件后才能保证不同分段音视频间的无缝连接。

    ◆ HLS一直在等切片数据,RTMP不需要切片

    原文链接:RTMP协议 和 HLS 协议 - 视频 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛 

     本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓私信或文章底部领取↓↓

    更多相关内容
  • plugin-rtmp the rtmp protocol plugin for...实现了RTMP协议的播放,可供rtmp协议播放器拉流播放。 插件名称 RTMP 配置 [RTMP] ListenAddr = ":1935" ChunkSize = 512 ListenAddr 代表监听的端口号 ChunkSize 分包大小
  • RTMP协议框架完美实现

    2018-06-15 17:02:17
    rtmpdump是一个优秀的rtmp框架,功能强大,大家可以下载并集成到自己的项目中。
  • RTMP协议中文.pdf

    2020-05-15 17:41:34
    Adobe公司的实时消息传输协议,RTMP协议官方说明文档,中文翻译。主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信
  • Rtmp协议中文介绍

    2017-12-12 10:02:24
    消息块流是为 Rtmp协议设计的,他可以处理任何传送消息流的协议,每一个消息包含时间戳 合有效负载类型标示, 消息块流和 一起适用于多样性音视频应用程序,从一对一和一对 多向视频点播服务器直接广播到交互式会议...
  • RTMP协议

    2021-10-06 20:14:27
    文章目录一、RTMP是什么?...该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP


    一、RTMP是什么?

    RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。

    二、RTMP与HLS比较

    HLS
    HLS 的基本原理就是当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的 ts 文件,同时服务器会建立一个 m3u8 的索引文件来维护最新几个 ts 片段的索引。当播放端获取直播时,它是从 m3u8 索引文件获取最新的 ts 视频文件片段来播放,从而保证用户在任何时候连接进来时都会看到较新的内容,实现近似直播的体验。相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件,客户端不断的下载并播放这些小文件。这种方式的理论最小延时为一个 ts 文件的时长,一般情况为 2-3 个 ts 文件的时长。HLS 的分段策略,基本上推荐是 10 秒一个分片,这就看出了 HLS 的缺点:
    1.通常 HLS 直播延时会达到 20-30s,而高延时对于需要实时互动体验的直播来说是不可接受的。
    2.HLS 基于短连接 HTTP,HTTP 是基于 TCP 的,这就意味着 HLS 需要不断地与服务器建立连接,TCP 每次建立连接时的三次握手、慢启动过程、断开连接时的四次挥手都会产生消耗。
    不过 HLS 也有它的优点:
    1.数据通过 HTTP 协议传输,所以采用 HLS 时不用考虑防火墙或者代理的问题。
    2.使用短时长的分片文件来播放,客户端可以平滑的切换码率,以适应不同带宽条件下的播放。
    3.HLS 是苹果推出的流媒体协议,在 iOS 平台上可以获得天然的支持,采用系统提供的 AVPlayer 就能直接播放,不用自己开发播放器。

    RTMP
    相对于 HLS 来说,采用 RTMP 协议时,从采集推流端到流媒体服务器再到播放端是一条数据流,因此在服务器不会有落地文件。这样 RTMP 相对来说就有这些优点:
    1.延时较小,通常为 1-3s,参考播放器 如ijkplayer、毫秒级的播放器,可以参考大牛直播SDK的RTMP播放器。
    2.基于 TCP 长连接,不需要多次建连。
    因此业界大部分直播业务都会选择用 RTMP 作为流媒体协议。通常会将数据流封装成 FLV 通过 HTTP 提供出去。但是这样也有一些问题需要解决:
    1.iOS 平台没有提供原生支持 RTMP 或 HTTP-FLV 的播放器,这就需要开发支持相关协议的播放器。

    三、RTMP创建流的基本流程

    基本流程:
    1.socket建立连接
    2.RTMP握手
    3.建立RTMP连接
    4.创建RTMP流

    1. RTMP握手

    RFC文档握手流程:
    在这里插入图片描述
    实际握手流程
    在这里插入图片描述

    2. 建立RTMP连接

    交互滑动窗口大小;设置带宽
    RFC文档连接流程:
    在这里插入图片描述
    实际连接流程
    在这里插入图片描述

    3. 创建RTMP流

    在这里插入图片描述
    如果有流要先释放掉
    无实际作用flash communication
    创建流
    返回状态
    在这里插入图片描述
    推流过程
    metadata中包含音视频的基本信息,如分辨率,采样大小等
    在这里插入图片描述
    拉流过程
    在这里插入图片描述
    RTMP处理流程:

    1. 首先,我们在RTMP连接之前,要创建 socket,通过socket建立tcp连接
    2. 在 tcp 上,创建 rtmp connection
    3. 然后rtmp 握手协议
    4. 握手结束,创建连接
    5. 创建结束,创建流
    6. 创建流结束,主播端,推送流,公众端,接受流 /拉流

    四、RTMP消息结构

    basic header(2bit fmt + 6bit data(2~63))必填,message header与extended timestamp可选
    data = 0时 basic header为2字节,CSID范围为64到64+2的8次方;data = 1时,basic header为4字节,CSID范围为64+2的8次方到64+2的8次方+2的24次方;data为2~63时,basic header为1字节,data此时为chunk stream ID即CSID
    Message header
    当数据量大,需要拆分多个块传输时,第一个块的message header四个部分都是存在的,后面的块如果与前面块的streamID,TypeID等相同,则可以省略
    Extended timestamp
    三字节时间辍无法表示时,置为FFFFFF,则扩展时间辍存在
    在这里插入图片描述
    在这里插入图片描述
    2:结束当前流,3:设置ack,从哪个ack开始确认,4:设置滑动窗口大小,5:设置传输带宽
    15,18:AMF为flash的编码格式,data message一般为meta数据
    17,20:创建流,推流,拉流都属于命令消息

    RTMP的握手没有header和body

    RTMP消息详解:https://www.jianshu.com/p/df987acf1246

    五、RTMP与FLV协议关系

    展开全文
  • RTMP 协议

    2020-12-04 10:21:45
    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。 RTMP协议从属于应用...

    一、概述
    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。

    RTMP协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频、视频和互动内容)。RTMP提供了一套全双工的可靠的多路复用消息服务,类似于TCP协议[RFC0793],用来在一对结点之间并行传输带时间戳的音频流,视频流,数据流。通常情况下,不同类型的消息会被分配不同的优先级,当网络传输能力受限时,优先级用来控制消息在网络底层的排队顺序。

    握手、消息块概念
    握手的目的是为了确认对端RTMP的Version和确认对端能互相通信。
    消息块就是消息的载体,是RTMP协议最重要的载体,这个载体是有一定格式的,如果把Client和Server端当作铁路的两个站点,
    那这个消息块就是火车,它负责运输货物。正如火车有火车头、车厢一样,消息块也有基本头,消息头和消息负载。RTMP协议当中,
    除了握手协议,其他的数据都是以消息块的方式发送的,发送一个消息时,当块大小比需要发送的消息的字节数更大时,
    一个消息块就相当于一个消息,否则消息需要分成多个消息块。


    握手
    要建立一个有效的RTMP Connection链接,首先要“握手”:客户端要向服务器发送C0,C1,C2(按序)三个chunk,服务器向客户端发送S0,S1,S2(按序)三个chunk,然后才能进行有效的信息传输。RTMP协议本身并没有规定这6个Message的具体传输顺序,但RTMP协议的实现者需要保证这几点如下:

    客户端要等收到S1之后才能发送C2

    客户端要等收到S2之后才能发送其他信息(控制信息和真实音视频等数据)

    服务端要等到收到C0之后发送S1

    服务端必须等到收到C1之后才能发送S2

    服务端必须等到收到C2之后才能发送其他信息(控制信息和真实音视频等数据)

    握手流程
    握手是一切的开始,Client和Server两个站点之前要运输货物,首先得先互相通知对方,确认铁轨是否符合火车运行,是否畅通无阻,是否能准确的运输货物到对端。
    实际的流程大概是这样的:

    Client发送带有1byte的C0和固定长度为1536byte的C1。
    Server发送S0S1S2给Client。
    Client发送C2。

     

    RTMP块流

    实时消息传递协议块流(RTMP块流)。RTMP块流作为一款高级多媒体流协议提供了流的多路复用和打包服务。RTMP块流被设计用来传输实时消息协议,它可以使用任何协议来发送消息流。每个消息都包含时间戳和有效类型标识。RTMP块流和RTMP适用于各种视听传播的应用程序,包括一对一的,和一对多的视频直播、点播服务、互动会议应用程序。

    当使用一个可靠的传输协议如TCP[RFC0793]时,RTMP块流提供了一种可以在多个流中,基于时间戳的端到端交付所有消息的方法。RTMP块流不提供任何优先级或类似形式的控制,但可以使用更高级别的协议来提供这样的优先级。

    RTMP块流不仅包含了自己的协议控制信息,同时也提供了一个更高级别的协议机制,用来嵌入用户控制信息。

     

    RMTP消息格式

    RMTP消息被分割成多个块,用来在更高的协议中支持多路复用。在消息格式时,应该包含以下字段:

    时间戳

    消息的时间戳。这个字段占用4字节。

    长度

    消息的有效长度。如果消息头不能被忽略,它应该包括长度。这个字段在块头中占用3字节。

    类型ID

    各种类型的协议控制消息的ID。这些消息使用RTMP块流协议和更高级别的协议来传输信息。所有其他类型的ID可以用在高级协议,这对于RTMP块流来说,是不透明的。事实上,RTMP块流中没有要求使用这些值作为类型;所有(无协议的)消息可能是相同的类型,或者应用程序使用这个字段来区分多个连接,而不是类型。这个字段在块头中占用1字节。

    消息流ID

    消息流ID可以是任意值。当同一个块流被复用到不同的消息流中时,可以通过消息流ID来区分它们。另外,对于RTMP块流而言,这是一个不透明值。该字段占用4字节,使用小端序。

    RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。

    消息

    消息是RTMP协议中基本的数据单元。不同种类的消息包含不同的Message Type ID,代表不同的功能。RTMP协议中一共规定了十多种消息类型,分别发挥着不同的作用。例如,Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。Message Type ID为8,9的消息分别用于传输音频和视频数据。Message Type ID为15-20的消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等等。消息首部(Message Header)有四部分组成:标志消息类型的Message Type ID,标志消息长度的Payload Length,标识时间戳的Timestamp,标识消息所属媒体流的Stream ID。消息的报文结构如下图所示。

     

    消息块

    在网络上传输数据时,消息需要被拆分成较小的数据块,才适合在相应的网络环境上传输。RTMP协议中规定,消息在网络上传输时被拆分成消息块(Chunk)。消息块首部(Chunk Header)有三部分组成:用于标识本块的Chunk Basic Header,用于标识本块负载所属消息的Chunk Message Header,以及当时间戳溢出时才出现的Extended Timestamp。消息块的报文结构如下图所示。

     

    消息分块

    在消息被分割成几个消息块的过程中,消息负载部分(Message Body)被分割成大小固定的数据块(默认是128字节,最后一个数据块可以小于该固定长度),并在其首部加上消息块首部(Chunk Header),就组成了相应的消息块。消息分块过程如下图所示,一个大小为307字节的消息被分割成128字节的消息块(除了最后一个)。

    RTMP传输媒体数据的过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。

     

    而在RTMP协议中,最重要的就是流的建立,涉及到的握手协议。

    展开全文
  • RTMP协议详解

    千次阅读 2021-11-11 08:50:10
    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。 RTMP协议是应用层...

    目录

    概述:

    rtmp播放流程

    代码示例:


    概述:

    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。

    RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接。

    RTMP一般在一个TCP通道上传输flv,f4v格式流和命令。

    RTSP传输一般需要 2-3 个通道,命令和数据通道分离;TS和MP4。

    概念

    有效负载:包含在每一个包中的数据,就像音视频样本或压缩后的视频数据。

    包: 一个数据包是由固定的包头和有效的负载数据来组成的。

    端口:rtmp协议默认使用的是1935端口。

    消息流:一个通信的逻辑通道,让消息流通

    消息流id:每个消息拥有一个分配的id,标识消息流。

    消息块:消息的一个片段,一个完整的消息会被分割成小的片段,每个片段都是一个消息块。

    消息块流:一个通信的逻辑通道,允许消息块在一个特定方向流通,例如:从客户端到服务器。

    消息块流id:每个消息块有一个分配的id用于识别跟随消息块流。

    复合技术:把分开的音视频数据组合成一条音视频流的过程。

    逆复合技术:复合的反向过程,交叉存取组装的音视频数据,是他们成为最初的音视频数据。

    时间戳:在rtmp消息块中的时间戳使用整数来表示,但是为毫秒。时间戳必须是线性增加的,允许引用程序处理异步传输,带宽度量,检测,流控制。

                                                          图1 RTMP协议流程

    bilibili pc端直播(libobs26.1.1推流,rtmp)wireshark截取摘要如下:(192.168.1.5本机IP)

    122775    2233.876959    192.168.1.5    111.62.90.116    RTMP    1591    Handshake C0+C1

    122783    2233.890926    192.168.1.5    111.62.90.116    RTMP    1590    Handshake C2

    122784    2233.902499    111.62.90.116    192.168.1.5    RTMP    138    Handshake C2

    122787    2233.903620    192.168.1.5    111.62.90.116    RTMP    283    Set Chunk Size 4096|connect('live-bvc')

    122790    2233.916266    111.62.90.116    192.168.1.5    RTMP    70    Window Acknowledgement Size 5000000

    122794    2233.975749    111.62.90.116    192.168.1.5    RTMP    333    Set Peer Bandwidth 5000000,Dynamic|Set Chunk Size 4096|_result('NetConnection.Connect.Success')

    122795    2233.976037    192.168.1.5    111.62.90.116    RTMP    186    releaseStream('?streamname=live_2039896039_16392939&key=519686c99f3b1a4200eab44d83621b9d&schedule=rtmp&pflag=2')

    122798    2233.988083    192.168.1.5    111.62.90.116    RTMP    215    FCPublish('?streamname=live_2039896039_16392939&key=519686c99f3b1a4200eab44d83621b9d&schedule=rtmp&pflag=2')|createStream()

    122800    2234.000070    111.62.90.116    192.168.1.5    RTMP    95    _result()

    122801    2234.000192    192.168.1.5    111.62.90.116    RTMP    191    publish('?streamname=live_2039896039_16392939&key=519686c99f3b1a4200eab44d83621b9d&schedule=rtmp&pflag=2')

    122804    2234.067911    111.62.90.116    192.168.1.5    RTMP    171    onStatus('NetStream.Publish.Start')

    122805    2234.068238    192.168.1.5    111.62.90.116    RTMP    467    @setDataFrame()音视频编码信息

    122819    2234.386047    192.168.1.5    111.62.90.116    RTMP    73    Audio Data

    122820    2234.386204    192.168.1.5    111.62.90.116    RTMP    4232    Video Data

    122821    2234.386240    192.168.1.5    111.62.90.116    RTMP    4151    Video Data

    122822    2234.386264    192.168.1.5    111.62.90.116    RTMP    4151    Video Data

    122823    2234.386290    192.168.1.5    111.62.90.116    RTMP    4151    Unknown (0x0)

    122824    2234.386322    192.168.1.5    111.62.90.116    RTMP    1506    Unknown (0x0)

    122825    2234.398021    111.62.90.116    192.168.1.5    TCP    60    1935 → 59645 [ACK] Seq=3527 Ack=4165 Win=42496 Len=0

    122835    2234.398316    192.168.1.5    111.62.90.116    RTMP    24738    Unknown (0x0)

    122854    2234.418696    192.168.1.5    111.62.90.116    RTMP    2335    Video Data

    122876    2234.452212    192.168.1.5    111.62.90.116    RTMP    4102    Video Data

    122880    2234.485544    192.168.1.5    111.62.90.116    RTMP    623    Audio Data

    122882    2234.497523    192.168.1.5    111.62.90.116    RTMP    638    Audio Data

    523792    2681.306871    192.168.1.5    111.62.90.116    RTMP    4151    Abort Message -684195369|Unknown (0x0)关闭直播

    rtmp播放流程

    RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。

                                                              图2  RTMP使用流程

    InitSockets():初始化Socket
    RTMP_Alloc():为结构体“RTMP”分配内存。
    RTMP_Init():初始化结构体“RTMP”中的成员变量。
    RTMP_SetupURL():设置输入的RTMP连接的URL。
    RTMP_Connect():建立RTMP连接,创建一个RTMP协议规范中的NetConnection。
    RTMP_ConnectStream():创建一个RTMP协议规范中的NetStream。
    RTMP_Read():从服务器读取数据。
    RTMP_Close():关闭RTMP连接。
    RTMP_Free():释放结构体“RTMP”。

    CleanupSockets():关闭Socket。

                                                               图3  建立网络连接

                                                               图4  建立网络流播放

    代码示例:

    #include <stdio.h>    
    #include "librtmp/rtmp_sys.h"    
    #include "librtmp/log.h"    
    
    int InitSockets()
    {
    	WORD version;
    	WSADATA wsaData;
    	version = MAKEWORD(1, 1);
    	return (WSAStartup(version, &wsaData) == 0);
    }
    
    void CleanupSockets()
    {
    	WSACleanup();
    }
    
    int main(int argc, char* argv[])
    {
    	InitSockets();
    
    	double duration = -1;
    	int nRead;
    	//is live stream ?    
    	bool bLiveStream = true;
    
    
    	int bufsize = 1024 * 1024 * 10;
    	char *buf = (char*)malloc(bufsize);
    	memset(buf, 0, bufsize);
    	long countbufsize = 0;
    
    	FILE *fp = fopen("receive.flv", "wb");
    	if (!fp){
    		RTMP_LogPrintf("Open File Error.\n");
    		CleanupSockets();
    		return -1;
    	}
    
    	/* set log level */
    	//RTMP_LogLevel loglvl=RTMP_LOGDEBUG;    
    	//RTMP_LogSetLevel(loglvl);    
    
    	RTMP *rtmp = RTMP_Alloc();
    	RTMP_Init(rtmp);
    	//set connection timeout,default 30s    
    	rtmp->Link.timeout = 10;
    	// HKS's live URL    
    	if (!RTMP_SetupURL(rtmp, "rtmp://live.hkstv.hk.lxdns.com/live/hks"))
    	{
    		RTMP_Log(RTMP_LOGERROR, "SetupURL Err\n");
    		RTMP_Free(rtmp);
    		CleanupSockets();
    		return -1;
    	}
    	if (bLiveStream){
    		rtmp->Link.lFlags |= RTMP_LF_LIVE;
    	}
    
    	//1hour    
    	RTMP_SetBufferMS(rtmp, 3600 * 1000);
    
    	if (!RTMP_Connect(rtmp, NULL)){
    		RTMP_Log(RTMP_LOGERROR, "Connect Err\n");
    		RTMP_Free(rtmp);
    		CleanupSockets();
    		return -1;
    	}
    
    	if (!RTMP_ConnectStream(rtmp, 0)){
    		RTMP_Log(RTMP_LOGERROR, "ConnectStream Err\n");
    		RTMP_Close(rtmp);
    		RTMP_Free(rtmp);
    		CleanupSockets();
    		return -1;
    	}
    
    	while (nRead = RTMP_Read(rtmp, buf, bufsize)){
    		fwrite(buf, 1, nRead, fp);
    
    		countbufsize += nRead;
    		RTMP_LogPrintf("Receive: %5dByte, Total: %5.2fkB\n", nRead, countbufsize*1.0 / 1024);
    	}
    
    	if (fp)
    		fclose(fp);
    
    	if (buf){
    		free(buf);
    	}
    
    	if (rtmp){
    		RTMP_Close(rtmp);
    		RTMP_Free(rtmp);
    		CleanupSockets();
    		rtmp = NULL;
    	}
    	return 0;
    }

    流测试:

    rtmp://live.hkstv.hk.lxdns.com/live/hks

    ​​​​​​​https://www.w3school.com.cn/i/movie.mp4

    展开全文
  • 流媒体协议:RTMP协议(中文)详解 流媒体协议:RTMP协议(中文)详解 流媒体协议:RTMP协议(中文)详解
  • RTMP协议规范中文翻译

    2017-11-14 17:14:44
    RTMP协议RTMP协议完整的中文翻译手册,便于学习RTMP协议
  • rtmp协议抓包分析

    2015-01-17 21:42:11
    rtmp协议抓包分析
  • RTMP协议官方文档

    2013-03-07 17:25:07
    RTMP协议官方文档 文档为英文版,从官方网站下载,希望对你有帮助
  • 本资源包含两个 pdf 文档,一本官方最新版的 rtmp_specification_1.0.pdf,一个中文翻译的 rtmp_specification_1.0_cn.pdf
  • rtp协议往rtmp协议转换

    2014-06-16 13:21:16
    这是一篇论文,描述了如何从rtp协议往rtmp协议转换的实现细节和意义。
  • RTMP(Real Time Messaging Protocol) 是由 Adobe 公司基于 Flash Player 播放器对应的音视频 flv 封装格式提出的一种,基于TCP 的数据传输协议。本身具有稳定、兼容性强、高穿透的特点。常被应用于流媒体直播、...
  • RTMP推流,收流的各代码实现和代码和协议讲解 包括如下内容【0】所有需要的软件、代码、资料都在百度云盘...结合代码和协议,让您尽快熟悉RTMP协议和这套开源的代码,您可以改造成您需要的程序。RTMPDump是个好代码。
  • rtmp 协议规范 中文版

    千次下载 热门讨论 2013-11-16 20:06:29
    rtmp的协议规范,中文版的,学习RTMP协议的好资源。
  • 客户端与服务器的RTMP握手的的流程 ①, 客户端发送 C0+C1 规则是 消息头一共是9个字节分别是: cid 标志是什么命令(一个字节) 时间戳timestamp(四个字节) 扩展字节(四个字节) 一个字节标志是什么游戏...
  • RTMP协议分析-chunk格式

    2022-05-17 14:06:36
    对于RTMP协议来说,他的 传输单元是 chunk。一个 RTMP 包就是一个 chunk。所以 chunk 的格式,也就是 RTMP 报文的格式。chunk 的格式如下: 编辑切换为居中 可以看到 Chunk Header 由 3 部分组成。 Basic ...
  • Rtmp协议看一篇就够了

    2020-11-03 10:38:40
    1 rtmp chunk struct: 2 chunk msg header2.1basic header,chunk msg header 关系和chunk msg header struct basic header和chunk msg header都是变长的. basic header根据chunk stream id的大小,可以是1 bytes...
  • Rtmp协议实现

    2022-02-05 23:20:41
    Rtmp协议看一篇就够了_fdsafwagdagadg6576的专栏-CSDN博客 rtmp 封装h264需要应用层处理, librtmp仅仅负责connect&send rtmp 协议封包Rtmp协议看一篇就够了_fdsafwagdagadg6576的专栏-CSDN博客 实现代码 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,523
精华内容 8,609
关键字:

rtmp协议

友情链接: Jakes.rar