1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Optimize init h265 track and format.

This commit is contained in:
chundonglinlin 2025-02-21 23:05:39 +08:00
parent 83e8877623
commit 8953dbfba1
7 changed files with 49 additions and 53 deletions

View file

@ -483,6 +483,23 @@ void SrsRtcSource::init_for_play_before_publishing()
video_track_desc->media_ = video_payload;
video_payload->set_h264_param_desc("level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f");
#ifdef SRS_H265
// default h265 video track description
SrsRtcTrackDescription* h265_video_track_desc = new SrsRtcTrackDescription();
stream_desc->video_track_descs_.push_back(h265_video_track_desc);
h265_video_track_desc->type_ = "video";
h265_video_track_desc->id_ = "video-" + srs_random_str(8);
h265_video_track_desc->ssrc_ = video_ssrc;
h265_video_track_desc->direction_ = "recvonly";
SrsVideoPayload* h265_video_payload = new SrsVideoPayload(kVideoPayloadType, "H265", kVideoSamplerate);
h265_video_track_desc->media_ = h265_video_payload;
h265_video_payload->set_h265_param_desc("level-id=180;profile-id=1;tier-flag=0;tx-mode=SRST");
#endif
}
set_stream_desc(stream_desc.get());
@ -1084,10 +1101,6 @@ srs_error_t SrsRtcRtpBuilder::on_video(SrsSharedPtrMessage* msg)
if (has_idr) {
SrsUniquePtr<SrsRtpPacket> pkt(new SrsRtpPacket());
if ((err = bridge_->update_codec(format->vcodec->id)) != srs_success) {
return srs_error_wrap(err, "update codec");
}
if ((err = package_stap_a(msg, pkt.get())) != srs_success) {
return srs_error_wrap(err, "package stap-a");
}
@ -1235,7 +1248,7 @@ srs_error_t SrsRtcRtpBuilder::package_stap_a(SrsSharedPtrMessage* msg, SrsRtpPac
}
memcpy(payload, (char*)param->data(), param->size());
payload += (int)param->size();
payload += (int)param->size();
}
return err;
@ -1323,7 +1336,7 @@ srs_error_t SrsRtcRtpBuilder::package_nalus(SrsSharedPtrMessage* msg, const vect
SrsRtpFUAPayloadHevc* fua = new SrsRtpFUAPayloadHevc();
if ((err = raw->read_samples(fua->nalus, packet_size)) != srs_success) {
srs_freep(fua);
return srs_error_wrap(err, "read samples %d bytes, left %d, total %d", packet_size, nb_left, nn_bytes);
return srs_error_wrap(err, "read hevc samples %d bytes, left %d, total %d", packet_size, nb_left, nn_bytes);
}
fua->nalu_type = SrsHevcNaluTypeParse(header);
fua->start = bool(i == 0);
@ -1630,7 +1643,6 @@ srs_error_t SrsRtcFrameBuilder::packet_video(SrsRtpPacket* src)
SrsRtpPacket* pkt = src->copy();
if (pkt->is_keyframe()) {
// TODO: 处理H265
return packet_video_key_frame(pkt);
}