@@ -74,14 +74,25 @@ bool ParseHevcSingleNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
74
74
parsed_payload->type .Video .width = 0 ;
75
75
parsed_payload->type .Video .height = 0 ;
76
76
parsed_payload->type .Video .codec = kRtpVideoH265 ;
77
- parsed_payload->type .Video .isFirstPacket = true ;
77
+ // parsed_payload->type.Video.isFirstPacket = true;
78
78
RTPVideoHeaderH265* h265_header =
79
79
&parsed_payload->type .Video .codecHeader .H265 ;
80
80
81
+ if (payload_data_length <= 4 )
82
+ return false ;
83
+
84
+ if ((payload_data[0 ] == 0 && payload_data[1 ] == 0 && payload_data[2 ] == 1 ) ||
85
+ (payload_data[0 ] == 0 && payload_data[1 ] == 0 && payload_data[2 ] == 0 && payload_data[3 ] == 1 )) {
86
+ uint8_t single_nal_type = (payload_data[2 ] == 1 ) ? ((payload_data[3 ] >> 1 ) & 0x7F ) : ((payload_data[4 ] >> 1 ) & 0x7F );
87
+ h265_header->packetization_type = kH265SingleNalu ;
88
+ h265_header->nalu_type = single_nal_type;
89
+ parsed_payload->frame_type = kVideoFrameKey ;
90
+ return true ;
91
+ }
81
92
const uint8_t * nalu_start = payload_data + kHevcNalHeaderSize ;
82
93
size_t nalu_length = payload_data_length - kHevcNalHeaderSize ;
83
94
// nal type is at bit 6:1
84
- uint8_t nal_type = (payload_data[0 ] >>1 ) & kHevcTypeMask ;
95
+ uint8_t nal_type = (payload_data[0 ] >>1 ) & 0x7F ;
85
96
if (nal_type == kHevcAp ) {
86
97
// Skip the PayloadHdr. Also for simplicity, we don't support the DONL/DOND inclusion
87
98
// in aggregation packet.
@@ -124,7 +135,8 @@ bool ParseHevcSingleNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
124
135
parsed_payload->frame_type = kVideoFrameKey ;
125
136
break ;
126
137
default :
127
- parsed_payload->frame_type = kVideoFrameDelta ;
138
+ parsed_payload->frame_type = kVideoFrameKey ;
139
+ // parsed_payload->frame_type = kVideoFrameDelta;
128
140
break ;
129
141
}
130
142
return true ;
@@ -161,12 +173,13 @@ bool ParseHevcFuNalu(RtpDepacketizer::ParsedPayload* parsed_payload,
161
173
if (original_nal_type == kIdrNLp || original_nal_type == kIdrWRadl ) {
162
174
parsed_payload->frame_type = kVideoFrameKey ;
163
175
} else {
164
- parsed_payload->frame_type = kVideoFrameDelta ;
176
+ parsed_payload->frame_type = kVideoFrameKey ;
177
+ // parsed_payload->frame_type = kVideoFrameDelta;
165
178
}
166
179
parsed_payload->type .Video .width = 0 ;
167
180
parsed_payload->type .Video .height = 0 ;
168
181
parsed_payload->type .Video .codec = kRtpVideoH265 ;
169
- parsed_payload->type .Video .isFirstPacket = first_fragment;
182
+ // parsed_payload->type.Video.isFirstPacket = first_fragment;
170
183
RTPVideoHeaderH265* h265_header =
171
184
&parsed_payload->type .Video .codecHeader .H265 ;
172
185
h265_header->packetization_type = kH265FU ;
@@ -266,7 +279,8 @@ int RtpPacketizerH265::PacketizeAp(size_t fragment_index) {
266
279
267
280
// Next fragment.
268
281
++fragment_index;
269
- if (fragment_index == input_fragments_.size ())
282
+ // if (fragment_index == input_fragments_.size())
283
+ if (true )
270
284
break ;
271
285
fragment = &input_fragments_[fragment_index];
272
286
0 commit comments