美文网首页
H264 推流到RTMP服务器

H264 推流到RTMP服务器

作者: 梦入禅声 | 来源:发表于2019-01-07 16:00 被阅读0次

    使用librtmp进行推流,如果进行正常的H264推流,使用VLC等播放器,可正常播放。如果需要使用flash等播放器时,需在开始推流时,加入RTMP_PACKET_TYPE_INFO 0x12的数据包。

    char* put_amf_string(char *c, const char *str)

    {

    uint16_t len = strlen(str);

    c = AMF_EncodeInt16(c, c + 2, len);

    memcpy(c, str, len);

    return c + len;

    }

    int sendScriptData(const uint32_t videoW, const uint32_t videoH, const uint32_t frameRate)

    {

    const uint32_t uiPkgLen = 16 + 13 + 23 + 16 + 17 + 20 + 23 + 3;

    RTMPPacket packet;

    RTMPPacket_Reset(&packet);

    RTMPPacket_Alloc(&packet, uiPkgLen+1);

    char* p = (char*)packet.m_body;

    *p++ = AMF_STRING;

    p = put_amf_string(p, "@setDataFrame");

    *p++ = AMF_STRING;

    p = put_amf_string(p, "onMetaData");

    *p++ = AMF_OBJECT;

    p = put_amf_string(p, "copyright");

    *p++ = AMF_STRING;

    p = put_amf_string(p, "firehood");

    p = put_amf_string(p, "width");

    p = AMF_EncodeNumber(p, p + 9, videoW);

    p = put_amf_string(p, "height");

    p = AMF_EncodeNumber(p, p + 9, videoH);

    p = put_amf_string(p, "framerate");

    p = AMF_EncodeNumber(p, p + 9, frameRate);

    p = put_amf_string(p, "videocodecid");

    p = AMF_EncodeNumber(p, p + 9, 7);

    p = put_amf_string(p, "");

    *p++ = AMF_OBJECT_END;

    packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM;

    packet.m_packetType = RTMP_PACKET_TYPE_INFO;

    packet.m_hasAbsTimestamp = 0;

    packet.m_nTimeStamp = 0;

    packet.m_nChannel = STREAM_CHANNEL_VIDEO;

    packet.m_nInfoField2 = _rtmp->m_stream_id;

    packet.m_nBodySize = uiPkgLen;

    int iRet = sendRtmpPackage(&packet);

    RTMPPacket_Free(&packet);

    return iRet;

    }

    相关文章

      网友评论

          本文标题:H264 推流到RTMP服务器

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