使用rtmpdump库进行rtmps的推流

写这篇文章的目的:AMF真的很奇葩,rtmp大概样子,rtmpdump库可实现 rtmps推流

一)理论

1)搞清楚rtmp(Real Time Messaging Protocol)是哪家公司发明的?

        adobe公司。

2)rtmp协议是怎么宏观上怎么组织工作的?

        client 1 + server + client 2,服务器提供基本的服务,例如连接,推流(client to server),拉流(server to client),record等服务,客户端呢,根据自己的需求去找服务器索要服务。如何想要特殊服务,那必须得多花钱,充个vip。

    rtmp与rtsp的工作组织方式是一样的吗?留一个疑问。

3)rtmp是应用层协议,传输层都走的是tcp。那么在这个协议客户端怎么和服务器疯狂的互动交流的呢(控制信息)?

    使用的是AMF(Action Message Format),它有着和xml和json的一样的使命,就是传递交流数据。AMF是一个把空间做到极限的一种东西。编码方式是  len key type len value全是二进制的,就这么任性。也是adobe公司开发的。

  typedef enum
  { AMF_NUMBER = 0, AMF_BOOLEAN, AMF_STRING, AMF_OBJECT,
    AMF_MOVIECLIP,        /* reserved, not used */
    AMF_NULL, AMF_UNDEFINED, AMF_REFERENCE, AMF_ECMA_ARRAY, AMF_OBJECT_END,
    AMF_STRICT_ARRAY, AMF_DATE, AMF_LONG_STRING, AMF_UNSUPPORTED,
    AMF_RECORDSET,        /* reserved, not used */
    AMF_XML_DOC, AMF_TYPED_OBJECT,
    AMF_AVMPLUS,        /* switch to AMF3 */
    AMF_INVALID = 0xff
  } AMFDataType;
4)client最开始是怎么搞上的?

    a)tcp连接,sync ack sync  ack三下握手就建立了tcp连接

    b)rtmp应用程序握手 c0 c1 c2 (c client) , s0 s1 s2(server)

         怎么握手的百度一下,rtmp有简单握手和复杂握手两种 https://segmentfault.com/a/1190000018582522?utm_source=tag-newest

    c)然后就快搞上了,使用AMF,发信息"connect" 把其他附加信息带上 app=live  flashVer=WIN 15,0,0,235   tcUrl rtmp://192.168.99.144/live等进行连接app

    d)然后在拿AMF格式给服务器发送public命令,成功后,client就可以将流推上服务器了。

5)rtmp的分包传输,懒得看

一)实操

1)搭建一个本地的rtmp服务器

    我之前是使用srsrtmp的开源项目源码,编译后,在ubuntu上搭建一个普通的rtmp服务器,然后使用srs的工具推一波流。

如果成功了,那么你已经开启的rtmp探索之路了。

2)熟悉sample就可以掌握各个库的使用。

3)拿wireshark抓包,看一下client和server之间的交流过程。

 

三)有个项目是推流到facebook,facebook全部使用的是rtmps,然后就使用rtmpdump来实现。

     rtmp 是最基础的应用层协议,直接通过tcp进行通信。

     rtmpt 是将rtmp协议,放到http协议里面。这样我想起了ip协议放到ip协议里面,形成隧道。

      rtmps 是将rtmp协议,放到https协议里面,这样安全。

到这里就结束了,我使用rtmpdump库实现了rtmps facebook的推流。

你可能感兴趣的:(linux)