微笑永不打烊

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

为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);

}

 

posted on 2016-07-04 09:04  微笑永不打烊  阅读(583)  评论(0编辑  收藏  举报