@@ -342,62 +342,65 @@ bool ARFFPlayer::ReadThreadProcess()
342342 if (ret >= 0 ) {
343343 n_last_recv_data_time_ = rtc::Time32 ();
344344 if (packet->stream_index == n_video_stream_idx_) {
345- int64_t pts = 0 ;
346345 n_net_vid_band_ += packet->size ;
347- if (packet->flags & AV_PKT_FLAG_KEY) {
348-
346+ int64_t pts = 0 ;
347+ int64_t dts = 0 ;
348+ if (packet->dts == AV_NOPTS_VALUE) {
349+ dts = 0 ;
349350 }
350- if (packet->dts != 0 ) {
351- if (packet->dts == AV_NOPTS_VALUE) {
352- pts = 0 ;
353- }
354- else {
355- pts = av_rescale_q (packet->dts , vstream_timebase_, TIMEBASE_MS);
356- }
351+ else {
352+ dts = av_rescale_q (packet->dts , astream_timebase_, TIMEBASE_MS);
353+ }
354+ if (packet->pts == AV_NOPTS_VALUE) {
355+ pts = 0 ;
357356 }
358357 else {
359- if (packet->pts == AV_NOPTS_VALUE) {
360- pts = 0 ;
361- }
362- else {
363- pts = av_rescale_q (packet->pts , vstream_timebase_, TIMEBASE_MS);
364- }
358+ pts = av_rescale_q (packet->pts , astream_timebase_, TIMEBASE_MS);
359+ }
360+ if (dts == 0 && pts != 0 ) {
361+ dts = pts;
362+ }
363+ if (pts == 0 && dts != 0 ) {
364+ pts = dts;
365365 }
366366 if (b_no_buffer_) {
367367 OnBufferDecodeVideoData (packet);
368368 av_packet_unref (packet);
369369 delete packet;
370370 }
371371 else {
372- FFBuffer::RecvVideoData (packet, pts , pts, av_rescale_q (packet->duration , vstream_timebase_, TIMEBASE_MS));
372+ FFBuffer::RecvVideoData (packet, dts , pts, av_rescale_q (packet->duration , vstream_timebase_, TIMEBASE_MS));
373373 }
374374 }
375375 else if (packet->stream_index == n_audio_stream_idx_) {
376- int64_t pts = 0 ;
377376 n_net_aud_band_ += packet->size ;
378- if (packet->dts != 0 ) {
379- if (packet->dts == AV_NOPTS_VALUE) {
380- pts = 0 ;
381- }
382- else {
383- pts = av_rescale_q (packet->dts , astream_timebase_, TIMEBASE_MS);
384- }
377+ int64_t pts = 0 ;
378+ int64_t dts = 0 ;
379+ if (packet->dts == AV_NOPTS_VALUE) {
380+ dts = 0 ;
385381 }
386382 else {
387- if (packet->pts == AV_NOPTS_VALUE) {
388- pts = 0 ;
389- }
390- else {
391- pts = av_rescale_q (packet->pts , astream_timebase_, TIMEBASE_MS);
392- }
383+ dts = av_rescale_q (packet->dts , astream_timebase_, TIMEBASE_MS);
384+ }
385+ if (packet->pts == AV_NOPTS_VALUE) {
386+ pts = 0 ;
387+ }
388+ else {
389+ pts = av_rescale_q (packet->pts , astream_timebase_, TIMEBASE_MS);
390+ }
391+ if (dts == 0 && pts != 0 ) {
392+ dts = pts;
393+ }
394+ if (pts == 0 && dts != 0 ) {
395+ pts = dts;
393396 }
394397 if (b_no_buffer_) {
395398 OnBufferDecodeAudioData (packet);
396399 av_packet_unref (packet);
397400 delete packet;
398401 }
399402 else {
400- FFBuffer::RecvAudioData (packet, pts , pts, av_rescale_q (packet->duration , astream_timebase_, TIMEBASE_MS));
403+ FFBuffer::RecvAudioData (packet, dts , pts, av_rescale_q (packet->duration , astream_timebase_, TIMEBASE_MS));
401404 }
402405 }
403406 }
0 commit comments