@@ -671,6 +671,7 @@ srs_error_t SrsSrtFrameBuilder::check_vps_sps_pps_change(SrsTsMessage *msg)
671
671
672
672
// ts tbn to flv tbn.
673
673
uint32_t dts = (uint32_t )(msg->dts / 90 );
674
+ uint32_t pts = (uint32_t )(msg->pts / 90 );
674
675
675
676
std::string sh;
676
677
SrsUniquePtr<SrsRawHEVCStream> hevc (new SrsRawHEVCStream ());
@@ -682,10 +683,16 @@ srs_error_t SrsSrtFrameBuilder::check_vps_sps_pps_change(SrsTsMessage *msg)
682
683
// h265 packet to flv packet.
683
684
char *flv = NULL ;
684
685
int nb_flv = 0 ;
685
- if ((err = hevc->mux_avc2flv (sh, SrsVideoAvcFrameTypeKeyFrame, SrsVideoAvcFrameTraitSequenceHeader, dts, dts, &flv, &nb_flv)) != srs_success) {
686
- return srs_error_wrap (err, " avc to flv" );
687
- }
688
-
686
+ if ((err = hevc->mux_avc2flv_enhanced (sh,
687
+ SrsVideoAvcFrameTypeKeyFrame,
688
+ SrsVideoHEVCFrameTraitPacketTypeSequenceStart,
689
+ dts,
690
+ pts,
691
+ &flv,
692
+ &nb_flv)) != srs_success) {
693
+ return srs_error_wrap (err, " hevc sh to flv" );
694
+ }
695
+
689
696
SrsMessageHeader header;
690
697
header.initialize_video (nb_flv, dts, video_streamid_);
691
698
SrsRtmpCommonMessage rtmp;
@@ -713,8 +720,6 @@ srs_error_t SrsSrtFrameBuilder::on_hevc_frame(SrsTsMessage *msg, vector<pair<cha
713
720
714
721
// ts tbn to flv tbn.
715
722
uint32_t dts = (uint32_t )(msg->dts / 90 );
716
- uint32_t pts = (uint32_t )(msg->pts / 90 );
717
- int32_t cts = pts - dts;
718
723
719
724
// for IDR frame, the frame is keyframe.
720
725
SrsVideoAvcFrameType frame_type = SrsVideoAvcFrameTypeInterFrame;
@@ -736,16 +741,9 @@ srs_error_t SrsSrtFrameBuilder::on_hevc_frame(SrsTsMessage *msg, vector<pair<cha
736
741
SrsBuffer payload (rtmp.payload (), rtmp.size ());
737
742
738
743
// Write 5bytes video tag header.
739
-
740
- // @see: E.4.3 Video Tags, video_file_format_spec_v10_1.pdf, page 78
741
- // Frame Type, Type of video frame.
742
- // CodecID, Codec Identifier.
743
- // set the rtmp header
744
- payload.write_1bytes ((frame_type << 4 ) | SrsVideoCodecIdHEVC);
745
- // hevc_type: nalu
746
- payload.write_1bytes (0x01 );
747
- // composition time
748
- payload.write_3bytes (cts);
744
+ // @see: https://veovera.org/docs/enhanced/enhanced-rtmp-v1.pdf, page 8
745
+ payload.write_1bytes (SRS_FLV_IS_EX_HEADER | (frame_type << 4 ) | SrsVideoHEVCFrameTraitPacketTypeCodedFramesX);
746
+ payload.write_4bytes (0x68766331 ); // 'h' 'v' 'c' '1'
749
747
750
748
// Write video nalus.
751
749
for (size_t i = 0 ; i != ipb_frames.size (); ++i) {
0 commit comments