librtmp usage
来源:互联网 发布:暗物质暗能量 知乎 编辑:程序博客网 时间:2024/05/22 03:37
rtmpdump是开发用于RTMP流的工具箱,支持所有RTMP格式,具体包含如下:
- RTMP
- RTMPE = RTMP + ENC,已加密的RTMP
- RTMPS = RTMP + SSL,通过SSL传输层传输RTMP
- RTMPT = RTMP + HTTP,在HTTP协议中传输RTMP
- RTMPTE = RTMP + HTTP + ENC,在HTTP协议中传输已加密RTMP
- RTMPTS = RTMP + HTTP + SSL,通过SSL传输层在HTTP协议中传输RTMP
源码下载
git clone git://git.ffmpeg.ort/rtmpdump
从v2.1开始,提供了两个额外的程序,rtmpsrv和rtmpsuck.
* rtmpsrv是服务器的存根,它记录了来自客户端的请求的连接和播放参数。然后它会使用这些参数来调用rtmpdump以请求流。
* rtmpsuck是一个透明代理,它会拦截来自客户端的连接并创建一个向外的连接至真实服务器。当所有握手完成且双端协商加密key完毕后,它会把所有服务器发给客户端的流数据以明文形式记录至文件。
librtmp Usage
librtmp是一组RTMP API,该组API中提供了大量的客户端函数以及小部分服务器函数,以支持RTMP、RTMPT、RTMPE、RTMPS、RTMPTE以及RTMPTS。虽然RTMP最基础的Spec已经由Adobe公司发布,不过本组API并未采用Adobe的Spec进行逆向开发。因此,本组API可能与已发布Spec有所出入,但通常是和其他Adobe客户端运行方式一致的。
1. 概述
RTMPDump软件包在rtmpdump中包含了一个基础客户端工具程序,一些服务器示例,以及一个支持编程访问RTMP协议的库。
基础交互过程如下:
* RTMP_Alloc()创建会话句柄(session handle)
* RTMP_Init()进行初始化
* RTMP_SetupURL()提供所有会话参数
* RTMP_Connect()建立网络连接
* RTMP_ConnectStream()建立RTMP会话
* RTMP_Read()读取流,如返回0字节,则流读取完毕
* RTMP_Close()用于关闭流
* RTMP_Free()用于释放会话句柄
- 如需发布流,可在RTMP_Connect()前调用RTMP_EnableWrite(),然后在会话建立后使用使用RTMP_Write()
- RTMP_Pause()在流播放过程中用于在暂停和播放状态间切换
- RTMP_Seek()用于在流播放过程中移动位置
所有数据以FLV格式进行传输,基础会话需要提供RTMP URL。RTMP URL格式如下:
rtmp[t][e][s]://hostname[:port][/app[/playpath]]
如前所述,原始rtmp、协议或传输层包裹的及已加密会话均可支持。
额外的参数可通过在URL后添加以空格区隔的键值对(key=value)进行指定,需要注意的是含有特殊字符时要使用‘\HH(Hexadecimal)’格式,以免误导选项解释器(option parser),例如,空格需表示为’\20’,反斜杠为’\5c’。
2. 选项
网络参数(Network)
参数定义如何连接至媒体服务器:
* socks=host:port 使用指定的SOCKS4 proxy
连接参数(Connection)
选项定义了RTMP连接请求分组内容,如未提供正确值,媒体服务器将拒绝连接:
* app=name RTMP服务器上希望连接的程序,会覆盖URL中包含的程序名。某些时候librtmp URL parser不能够智能决定app名称,所以可通过该参数进行指定
* tcUrl=url 目标流的URL,默认为rtmp[t][e|s]://host[:port]/app
* pageUrl=url 媒体被嵌入的网页URL,默认不设定任何值
* swfUrl=url 用于媒体的SWF播放器,默认不设定任何值
* flashVer=version 用于启动SWF播放器的Flash插件版本,默认为”LNX 10,0,32,18”
* conn=type:data 在连接消息后添加任意AMF数据,类型必须为B(Boolean)/N(number)/S(string)/O(object)或Z(null)。对于Boolean类型,用0和1分别代表FALSE和TRUE;类似地对于Objects必须使用0或1来分别代表一个对象的结束和开始;子对象中的数据成员可能被命名,可在类型前加前缀‘N’并依次指定名称和值,如NB:myFlag:1。该选项可多次使用以构建各种AMF序列,如:
`conn=B:1 conn=S:authMe conn=0:1 conn=NN:code:1.23 conn=NS:flag:ok conn=0:0`
3. 会话参数
这些选项将在连接请求成功后生效。
- playpath=path 覆盖从RTMP URL中解析出来的playpath。有时候rtmpdump URL parser不能够正确地判断出正确的playpath,所以必须通过该选项进行显式指定
- playlist=0/1 默认值为FALSE。如果值为1或TRUE,则在发送play命令前提交一个set_playlist命令。播放列表中会只包含当前playpath。如该值为0或FALSE,set_playlist命令不会被发送。
- live=0/1 标明该媒体是一个live流,这意味着恢复和seeking操作都是不支持的
- subscribe=path 订阅的live流名称,默认情况和playpath一致
- start=num 从流的第几秒开始,live流不支持该参数
- stop=num 在流的第几秒结束
- buffer=num 设置buffer的大小,单位为ms,默认值为3000
- timeout=num 设置会话超时时间,如num秒内未收到服务器端数据,则超时返回。默认为120s.
4. 安全参数
这些参数用于处理来自服务器端的额外的验证请求。
- token=key SecureToken响应的Key,如server需要SecureToken验证时,将使用到该Key
- jtv=JSON JSON token用于传统的Jstin.tv服务器,将调用NetStream.Authenticate.UsherToken
- swfVfy=0/1 如该值为1或TRUE,SWF播放器将会从swfUrl指定路径获取以完成SWF确认。SWF的hash和size是自动计算完成的。同时SWF信息会被缓存到用户目录下的文件.swfinfo中,所以实际上不必每次接收后都进行重复计算。.swfinfo文件记录了SWF URL、fetch到的时间、SWF文件修改的时间戳、文件大小、以及hash代码。默认情况下,缓存信息会在重校验(re-checking)前的30天内有效
- swfAge=days 指定重校验前缓存SWF信息的使用天数。设置为0时表示每次都要去校验SWF URL。注意如果校验结果显示SWF文件和之前的时间戳一致,不会再重复获取。
- librtmp usage
- usage
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- libRTMP使用说明
- librtmp 编译
- libRTMP编译
- Compile libRTMP with MinGW
- Building librtmp for iOS
- 解决gas mask在macOS Sierra下报错NSInvalidArgumentException
- 只让UITextField输入数字
- node.js的post和get简单取值
- Hadoop CombineFileInputFormat原理说明(转)
- Ubuntu下配置eclipse出现问题
- librtmp usage
- RAC下创建白名单
- linux之间文件传输(转)
- WEB打印控件Lodop的使用
- javascript动态添加、修改、删除对象的属性和方法
- JAVA线程池shutdown和shutdownNow的区别
- StringBuffer-字符串缓冲区
- LeetCode 343. Integer Break
- 蓝鸥零基础学习HTML5之CSS的基础样式一