Я работаю над встроенной системой Linux (ядро-5.10.24) и хочу использовать библиотеки ffmpeg (ffmpeg-4.4.4) для декодирования видео.
Код C выглядит следующим образом: для декодирования видео он использует декодер h264_v4l2m2m,
# ./test_ffmpeg ./test.mp4 /tmp/output
[h264_v4l2m2m @ 0x1d76320] Using device /dev/video0
[h264_v4l2m2m @ 0x1d76320] driver 'mysoc-vdec' on card 'msoc-vdec' in mplane mode
[h264_v4l2m2m @ 0x1d76320] requesting formats: output=H264 capture=NV12
[h264_v4l2m2m @ 0x1d76320] the v4l2 driver does not support end of stream VIDIOC_SUBSCRIBE_EVENT
XXXXXXXXXXXX width: 1280, height: 720, fmt: 0
[swscaler @ 0x1dadaa0] No accelerated colorspace conversion found from yuv420p to rgb24.
[h264_v4l2m2m @ 0x1d76320] VIDIOC_G_SELECTION ioctl
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
[swscaler @ 0x1dadaa0] bad src image pointers
......
И он работал около 4 секунд, а test.mp4 — около 13 секунд.
Если бы я НЕ указал h264_v4l2m2m в качестве декодер, НЕТ плохих указателей изображений src, и время его выполнения такое же, как и у файла mp4.
Что не так с использованием приведенных выше кодов h264_v4l2m2m и как это исправить?
Я работаю над встроенной системой Linux (ядро-5.10.24) и хочу использовать библиотеки ffmpeg (ffmpeg-4.4.4) для декодирования видео. Код C выглядит следующим образом: для декодирования видео он использует декодер h264_v4l2m2m, [code]#include #include #include #include #include #include #include
int main(int argc, char *argv[]) { if (argc < 3) { printf("Usage: %s \n", argv[0]); return -1; }
while (av_read_frame(fmt_ctx, &pkt) >= 0) { if (pkt.stream_index == video_stream_index) { int ret = avcodec_send_packet(codec_ctx, &pkt); if (ret < 0) { fprintf(stderr, "Error sending packet for decoding\n"); return -1; }
while (ret >= 0) { ret = avcodec_receive_frame(codec_ctx, frame); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { break; } else if (ret < 0) { fprintf(stderr, "Error during decoding\n"); return -1; }
return 0; } [/code] Он работал с некоторыми журналами ошибок из swscale следующим образом: [code]# ./test_ffmpeg ./test.mp4 /tmp/output [h264_v4l2m2m @ 0x1d76320] Using device /dev/video0 [h264_v4l2m2m @ 0x1d76320] driver 'mysoc-vdec' on card 'msoc-vdec' in mplane mode [h264_v4l2m2m @ 0x1d76320] requesting formats: output=H264 capture=NV12 [h264_v4l2m2m @ 0x1d76320] the v4l2 driver does not support end of stream VIDIOC_SUBSCRIBE_EVENT XXXXXXXXXXXX width: 1280, height: 720, fmt: 0 [swscaler @ 0x1dadaa0] No accelerated colorspace conversion found from yuv420p to rgb24. [h264_v4l2m2m @ 0x1d76320] VIDIOC_G_SELECTION ioctl [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers [swscaler @ 0x1dadaa0] bad src image pointers ...... [/code] И он работал около 4 секунд, а test.mp4 — около 13 секунд. Если бы я НЕ указал h264_v4l2m2m в качестве декодер, НЕТ плохих указателей изображений src, и время его выполнения такое же, как и у файла mp4. Что не так с использованием приведенных выше кодов h264_v4l2m2m и как это исправить?
Версия FFmpeg.AutoGen: 7.0
Далее аналогично файлу Program.cs в каталоге «FFmpeg.AutoGen.Example».
var sourceSize = vsd.FrameSize;
var sourcePixelFormat = AVPixelFormat.AV_PIX_FMT_CUDA;
var destinationSize = sourceSize;
var destinationPixelFormat =...
Я пытаюсь транслировать экран с устройства iOS на устройство Android.
Я использую ReplayKit на iOS для захвата экрана и VideoToolbox для сжатия захваченных видеоданных в формат H.264 с помощью CMSampleBuffers. И iOS, и Android настроены на сжатие и...
Я пытаюсь транслировать экран с устройства iOS на устройство Android.
Я использую ReplayKit на iOS для захвата экрана и VideoToolbox для сжатия захваченных видеоданных в формат H.264 с помощью CMSampleBuffers. И iOS, и Android настроены на сжатие и...
Я создаю приложение для iOS, которое декодирует поток h264 с помощью панели инструментов видео. Я создаю поток с помощью ffmpeg на ПК и отправляю его на iPhone с помощью RTP. Он отлично работает, когда я использую эту команду для его создания:...