美文网首页
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