本文主要是介绍metartc5_jz源码阅读-yang_push_h264_encodeVideo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//编码rtp的视频buffer,发送给p2p对端。
int32_t yang_push_h264_encodeVideo(YangRtcSession *session, YangPushH264Rtp *rtp,YangRtpPacket *pkt) {int err = 0;//用videoRtpBuffer中的数据填充rtp->buf.yang_init_buffer(&rtp->buf, yang_get_rtpBuffer(rtp->videoRtpBuffer), kRtpPacketSize);//用pkt->header中的数据填充rtp->bufif ((err = yang_encode_rtpHeader(&rtp->buf, &pkt->header)) != Yang_Ok) {return yang_error_wrap(err, "rtp header(%d) encode packet fail",pkt->payload_type);}//如果payloadType为raw,则从rtp->videoRawData中读取数据填充rtp->bufif (pkt->payload_type == YangRtspPacketPayloadTypeRaw) {err = yang_encode_h264_raw(&rtp->buf, &rtp->videoRawData);} else if (pkt->payload_type == YangRtspPacketPayloadTypeFUA2) {//如果payloadType为FUA2,则从rtp->videoFua2Data中读取数据填充rtp->buferr = yang_encode_h264_fua2(&rtp->buf, &rtp->videoFua2Data);} else if (pkt->payload_type == YangRtspPacketPayloadTypeSTAP) {//如果payloadType为STAP,则从rtp->stapData中读取数据填充rtp->buferr = yang_encode_h264_stap(&rtp->buf, &rtp->stapData);yang_reset_h2645_stap(&rtp->stapData);}if (err != Yang_Ok) {return yang_error_wrap(err, "rtp payload(%d) encode packet fail",pkt->payload_type);}//如果padding_length大于0时,则增加header的size.if (pkt->header.padding_length > 0) {uint8_t padding = pkt->header.padding_length;if (!yang_buffer_require(&rtp->buf, padding)) {return yang_error_wrap(ERROR_RTC_RTP_MUXER,"padding requires %d bytes", padding);}memset(rtp->buf.head, padding, padding);yang_buffer_skip(&rtp->buf, padding);}//设置video的sendStats,包括rtp包数量、字节数、发送时间戳等。session->context.stats.on_pub_videoRtp(&session->context.stats.sendStats,pkt,&rtp->buf);//调用yang_send_avpacket将rtp包发送给p2p对端。return yang_send_avpacket(session, pkt, &rtp->buf);
}
这篇关于metartc5_jz源码阅读-yang_push_h264_encodeVideo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!