يكسر av_seek_frame avcodec_decode_video2 عندما يستخدم برنامج الترميز إطارات p
-
09-09-2020 - |
سؤال
أحاول أن أفهم كيفية البحث عن مقاطع الفيديو المشفرة بإطارات p (على سبيل المثال.H.264)-- في الوقت الحالي، أعرف فقط كيفية البحث عن مقاطع الفيديو المشفرة باستخدام برامج الترميز التي يكون كل إطار فيها إطارًا رئيسيًا (على سبيل المثال.مجبيغ).
بالنظر إلى الطابع الزمني، في النهاية يجب أن يلعب الإطار الخاص بهذا الطابع الزمني. لكن في الوقت الحالي، أحاول فقط تشغيل الإطار الرئيسي بالقرب من الطابع الزمني. لذلك أولا--
ret = av_seek_frame(pFormatCtx, videoStream, avTime, 0);
avcodec_flush_buffers(pCodecCtx);
ثم بعض التعليمات البرمجية المتداخلة، بما في ذلك av_read_frame
.ثم--
ret = avcodec_decode_video2(pCodecCtx, captureFrame, &gotPicture, &packet);
الملاحظات:
المحلول
استبدل هذا--
ret = av_seek_frame(pFormatCtx, videoStream, avTime, isPlayingBackward ? AVSEEK_FLAG_BACKWARD : 0);
avcodec_flush_buffers(pCodecCtx);
مع هذا--
ret = avformat_seek_file(pFormatCtx, videoStream, 0, avTime, avTime, 0);
(تنبيه قضائي:المستندات ل avformat_seek_file
يقول:"هذا جزء من واجهة برمجة تطبيقات البحث الجديدة التي لا تزال قيد الإنشاء.وبالتالي لا تستخدم هذا بعد.قد يتغير في أي وقت، لا تتوقع توافق ABI بعد!")
لا تنتمي إلى StackOverflow