libRTMP使用说明

名称

librtmp − RTMPDump Real-Time Messaging Protocol API

RTMPDump RTMP(librtmp, -lrtmp)

简介

#include<librtmp/rtmp.h>

描述

实时流协议(Real-TimeMessaging Protocol,RTMP)是用于互联网上传输视音频数据的网络协议。本API提供了支持RTMP, RTMPT,RTMPE, RTMP RTMPS以及以上几种协议的变种(RTMPTE, RTMPTS)协议所需的大部分客户端功能以及少量的服务器功能。尽管Adobe公司已经公布了RTMP协议规范(RTMP specification),但是本工程并不是通过Adobe的协议规范而是通过逆向工程的方式完成的。因此,它的运行方式可能和公布的协议规范有所偏离,但是一般情况下它和Adobe的客户端的运行方式是一模一样的。

RTMPDump 软件包含一个基本的客户端:rtmpdump,一些示例服务器和一个用来提供对RTMP协议进行支持的库(libRTMP)。本页面对libRTMP的函数进行一个概述。 这些函数可以在 -lrtmp 库中找到。其他还有很多函数,但是还没有为这些函数写文档。

基本的操作如下文所述。

RTMP_Alloc() :用于创建一个RTMP会话的句柄。

RTMP_Init():初始化句柄。

RTMP_SetupURL():设置会话的参数。

RTMP_Connect():建立RTMP链接中的网络连接(NetConnection)。

RTMP_ConnectStream():建立RTMP链接中的网络流(NetStream)。

RTMP_Read():读取RTMP流的内容。

客户端可以在调用RTMP_Connect()之前调用RTMP_EnableWrite(),然后在会话开始之后调用 RTMP_Write()。

RTMP_Pause():流播放的时候可以用于暂停和继续

RTMP_Seek():改变流播放的位置

RTMP_Read()返回0 字节的时候,代表流已经读取完毕,而后可以调用RTMP_Close()

RTMP_Free():用于清理会话。

所有的数据都使用 FLV 格式进行传输。一个基本的会话需要一个RTMP URL。RTMP URL 格式如下所示:

 rtmp[t][e|s]://hostname[:port][/app[/playpath]]

支持普通的,隧道的,以及加密的会话。

其他附加的选项可以在URL的后面添加以空格为间隔符的“key=value”形式的字符串。

选项

网络(Network)参数

这些选项定义了如何连接一个流媒体服务器。

socks=host:port

使用指定 SOCKS4代理。

连接(Connection)参数

这些选项定义了RTMP连接(Connect)请求消息的内容。如果没有提供正确的值,流媒体服务器会拒绝连接请求。

app=name

连接到RTMP的应用名,覆盖RTMP URL中的app。有时rtmpdumpURL 无法正确自动解析app名称。这时必须使用该选项。

tcUrl=url

目标流的URL。默认是 rtmp[t][e|s]://host[:port]/app.

pageUrl=url

流媒体所在的网页的URL。默认情况下没有被发送的价值。

swfUrl=url

流媒体使用的SWF播放器的的URL。默认情况下没有被发送的价值。

flashVer=version

swf播放器使用的Flash版本. 默认是"LNX 10,0,32,18"。

conn=type:data

任意AMF数据追加到connect,类型说明,

B 布尔型

N 数字

S 字符串

O 对象

Z 空

对于布尔型必须是0或1作为FALSE或TRUE,

对于对象数据必须以0或1分别作为结束和开始的标制,子对象中数据项前加前缀类型N,并指定值名称,例如:

  -C B:1 -C S:authMe -C O:1 -C NN:code:1.23-C NS:flag:ok -C O:0

会话(Session)参数

这些选项在连接成功后生效。

playpath=path

覆盖RTMP URL解析的playpath,rtmpdump有时不能正确解析,通过该选项明确。

playlist=0|1

在play命令之前发生set_playlist命令。否则播放列表将会值包含playpath。

live=0|1

指定媒体是实时流。在实时流中没有恢复和搜索。

subscribe=path

订阅的实时流名称。默认playpath。

start=num

开始到流的秒数(num),实时流无效。

stop=num

停止到流的秒数(num)。

buffer=num

设置缓冲时间,单位毫秒。 默认值36000000。

timeout=num

num秒后没有收到任何数据会话超时,默认值120。

安全(Security)参数

这些选项处理额外的身份验证,来自服务器的请求。

token=key

输入安全令牌响应,如果服务器需要使用安全令牌验证。

jtv=JSON

JSON令牌用于传统Justin.tv服务器 ,调用NetStream.Authenticate.UsherToken。

swfVfy=0|1

swf播放器的URL,此选项将替换所以三个--swfUrl,--swfhash, and --swfsize选项。使用此选项时,swf播放器将从指定URL检索,并自动计算哈希和大小。此外信息缓存在一个swfinfo文件在用户主目录,所以它在每次rtmpdump运行时,并不需要检索和重新计算。swfinfo记录URL,生成时间,修改SWF文件时间,它的大小,它的哈希,默认情况下,缓冲信息用于30天,然后重新检测。

swfAge=days

指定使用缓存的swf信息天数,然后重新检查,使用0为经常检查,如果检查显示swf具有相同的修改时间戳,它不会被再次检索。

例子

RTMP_SetupURL()使用的一个例子字符串:

 "rtmp://flashserver:1935/ondemand/thefile swfUrl=http://flashserver/player.swfswfVfy=1"

参见

rtmpdump(1), rtmpgw(8)

作者

Andrej Stepanchuk, Howard Chu,The Flvstreamer Team 

http://rtmpdump.mplayerhq.hu


翻译的有的地方还不是很通顺,以后再改进

原文地址:http://rtmpdump.mplayerhq.hu/librtmp.3.html


转载于:https://www.cnblogs.com/leixiaohua1020/p/3901980.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: librtmp是一个用于从流媒体服务器中拉取或向流媒体服务器推送流的库。它的使用相对复杂,需要掌握一些基本操作和概念。下面是一个使用librtmp的实例: 1. 首先,我们需要创建一个RTMP对象,并与媒体服务器建立连接: RTMP* rtmp = RTMP_Alloc(); RTMP_Init(rtmp); RTMP_SetupURL(rtmp, "rtmp://server.com/stream"); RTMP_EnableWrite(rtmp); if(!RTMP_Connect(rtmp, NULL) || !RTMP_ConnectStream(rtmp, 0)) { // 连接失败,需要进行错误处理 return; } 2. 接下来,我们可以向服务器推送流,例如: RTMPPacket* packet = RTMP_AllocPacket(1024); RTMPPacket_Reset(packet); packet->m_packetType = RTMP_PACKET_TYPE_AUDIO; packet->m_nChannel = RTMP_STREAM_CHANNEL_AUDIO; packet->m_nTimeStamp = RTMP_GetTime(); packet->m_body = ... // 将待推送的音频数据填充到packet的m_body中 packet->m_nBodySize = ... // 记录音频数据的大小 if(!RTMP_SendPacket(rtmp, packet, TRUE)) { // 推送失败,需要进行错误处理 } RTMP_FreePacket(packet); 3. 拉取服务器的流也类似,我们可以使用RTMP_Read方法从服务器读取数据: RTMPPacket* packet = RTMP_AllocPacket(1024); while(RTMP_Read(rtmp, packet) > 0) { // 处理packet数据 } RTMP_FreePacket(packet); 以上是一个简单的librtmp使用实例,实际使用时需要根据具体需求进行修改和扩展。同时,需要注意librtmp本身存在一些稳定性和性能问题,需要谨慎使用。 ### 回答2: librtmp是一个使用C语言编写的开源软件库,主要用于RTMP协议的数据传输。librtmp使用示例中,可以使用它来发送和接收流媒体数据,这里简单介绍一下librtmp使用实例: 1.打开URL:使用RTMP_Open()函数打开一个RTMP流媒体连接,需要传入一个URL字符串参数,这个URL可以是本地文件或者是远程主机。 2.设置元数据:使用RTMP_SetMetadata()函数,设置元数据,这些元数据包括视频宽度,高度,帧速率和音频的采样率。 3.建立流:使用RTMP_AllocStream()函数,建立一个流并返回流ID,在使用RTMP_SendPacket()函数发送数据之前,首先要通过RTMP_AllocStream()函数建立一个流ID。 4.发送数据:使用RTMP_SendPacket()函数发送音频或视频数据包,通过流ID确定数据发送到哪个流。 5.接收数据:使用RTMP_ReadPacket()函数从流中读取数据包,该函数会一直等待数据包,直到有数据包可用或者连接被关闭才返回。 6.关闭连接:使用RTMP_Close()函数关闭连接。 需要注意的是,使用librtmp时需要安装librtmp库,另外需要在编译选项中加入-lrtmp参数,具体实现过程中还需注意一些细节问题,如何正确的打开流媒体连接、如何正确读取数据进行解码等等。 总的来说,librtmp使用实例较为繁琐,但是通过掌握这些细节问题,可以更深入的了解到流媒体传输的过程,进而更好的实现流媒体数据的传输和解码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值