美文网首页
librtmp usage

librtmp usage

作者: SniperPan | 来源:发表于2016-10-27 13:48 被阅读380次

    个人翻译,转载请注明出处,谢谢!
    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

          本文链接:https://www.haomeiwen.com/subject/jttsuttx.html