zoukankan      html  css  js  c++  java
  • iOS-为librtmp库添加向服务器发送录制命令方法

    为librtmp库添加向服务器发送录制命令方法是基于librtmp库而写,recordData为录制命令,recordName、confID、timestamp为录制命令参数。

    SAVC(recordName);

    SAVC(confID);

    SAVC(timestamp);

    #define AVS(str) {str,strlen(str)}

    int

    startRecord(RTMP *r, RTMPPacket *cp, char *recordData,  char *recordName,  char *confID, char *timestamp)

    {

        RTMPPacket packet;

        char pbuf[1024], *pend = pbuf + sizeof(pbuf);

        char *enc;

        

        if (cp)

            return RTMP_SendPacket(r, cp, TRUE);

        

        const AVal avaldata = AVS(recordData);

    const AVal avalName = AVS(recordName);

    const AVal avalConfID = AVS(confID);

    const AVal avalTimeStamp = AVS(timestamp);

        

        packet.m_nChannel = 0x04; /* source channel (invoke) */

        packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM;

        packet.m_packetType = RTMP_PACKET_TYPE_INFO; /* DATA */

        packet.m_nTimeStamp = 0;

        packet.m_nInfoField2 = r->m_stream_id;

        packet.m_hasAbsTimestamp = 0;

        packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE;

        

        enc = packet.m_body;

     

        enc = AMF_EncodeString(enc, pend, &avaldata);

    if (!enc)

    return FALSE;

     

        *enc++ = AMF_OBJECT;  //AMF_OBJECT代表命令带有参数

     

        enc = AMF_EncodeNamedString(enc, pend, &av_recordName, &avalName);

         if (!enc)

            return FALSE;

     

        enc = AMF_EncodeNamedString(enc, pend, &av_confID, &avalConfID);

        if (!enc)

            return FALSE;

     

        enc = AMF_EncodeNamedString(enc, pend, &av_timestamp, &avalTimeStamp);

        if (!enc)

            return FALSE;

     

    if (enc + 3 >= pend)

            return FALSE;

        *enc++ = 0;

        *enc++ = 0; /* end of object - 0x00 0x00 0x09 */

        *enc++ = AMF_OBJECT_END;

     

     

        packet.m_nBodySize = enc - packet.m_body;

        

        return RTMP_SendPacket(r, &packet, TRUE);

    }

     

  • 相关阅读:
    ****阿里云使用+快速运维总结(不断更新)
    Linux 标准目录结构
    linux awk命令
    反射型 DDoS 攻击的原理和防范措施
    容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
    谈谈数据库的跨机房容灾-网易云
    前端 支持 超大上G,多附件上传
    java 支持 超大上G,多附件上传讨论
    java 支持 超大上G,多附件上传分享
    java 支持 超大上G,多附件上传功能
  • 原文地址:https://www.cnblogs.com/liyanyan/p/5639429.html
Copyright © 2011-2022 走看看