您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

rtp发送h264和h265

qianbo_insist 发布时间:2022-02-06 17:38:20 ,浏览量:0

rtp

实时传输协议,可以使用udp和tcp

h264 和 h265

h264有sps pps,se 帧,h265多一些,有sps pps vps等,不过不是很重要,接收的时候用的多一些,发送稍简单,以下是发送程序

mtu

最大传输单元,不管是tcp还是udp都必须要分包发送,因为超过mtu实际上被交换机等设备分帧,所以必须小于交换机等设备的最大传输单元,这样效率比较高。一般我们可以定义mtu为1400字节,当然可以再小一点,加上rtp协议头部的12字节,最多为1412字节,各位可以自己拟定。

网络发送

这一部分可以使用各类封装程序,也可以自己调用简单的socket api函数发送,具体不细节写了,读者可以自己用喜欢的程序来完成

void rtp_send_data(uint8_t *buf, int len, int last_packet_of_frame,uint32_t timestamp)
{

}
发送rtp for h264

分为h264和h265

void send_rtp_h264(uint8_t * data, int dlen,uint32_t timestamp)
{
	int iSize = max_payload_size- RTP_HEADERS_SIZE;
	uint8_t buf[max_payload_size];
	uint8_t *pos = &buf[12];//0 -11 是rtp头部
	if (dlen > iSize) { //超过MTU
		const uint8_t s_e_r_Start = 0x80;
		const uint8_t s_e_r_Mid = 0x00;
		const uint8_t s_e_r_End = 0x40;
		//获取帧头数据,1byte
		unsigned char naluType = (*data) & 0x1f; //获取NALU的5bit 帧类型

		unsigned char nal_ref_idc = (*data) & 0x60; //获取NALU的2bit 帧重要程度 00 可以丢 11不能丢
		//nal_ref_idc = 0x60;
		//组装FU-A帧头数据 2byte
		unsigned char f_nri_type = nal_ref_idc + 28;//F为0 1bit,nri上面获取到2bit,28为FU-A分片类型5bit
		unsigned char s_e_r_type = naluType;
		bool bFirst = true;
		bool mark = false;
		int nOffset = 1;
		while (!mark) {
			if (dlen priv_data;
	int rtp_payload_size = max_payload_size - RTP_HEVC_HEADERS_SIZE;
	int nal_type = (buf[0] >> 1) & 0x3F;

	/* send it as one single NAL unit? */
	if (len index;
		pkt->pts = av_rescale_q(pkt->pts, m_p_v->time_base,m_st_v->time_base);
		pkt->dts = av_rescale_q(pkt->dts, m_p_v->time_base, m_st_v->time_base);
		pkt->pos = -1;
		av_interleaved_write_frame(m_fmtctx, pkt);
		av_packet_free(&pkt);

	}
	void UnInit()
	{
		//销毁资源
		if (!(m_fmtctx->oformat->flags & AVFMT_NOFILE))
			avio_close(m_fmtctx->pb);
		avformat_free_context(m_fmtctx);
	}
};
关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0387s