LINUX.ORG.RU

FFmpeg libav* time_incr

 ,


0

1

Приветствую

Пытаюсь перекодировать mjpeg в h264, при попытке кодировать фрейм через avcodec_send_frame(pOutCdcCtx, pFrm) получаю ошибку

mpeg4 time_incr 12884901888 too large

time_base вроде задал

ошибка описана в исходнике mpeg4videoenc.c, как вычисление из MpegEncContext->time, но где задать это время???

во входном потоке с усб камеры как бы и нету такого значения временной метки...

★★★

Последнее исправление: wolverin (всего исправлений: 1)

Ответ на: комментарий от hizel

еще до позопрошлонедельного изменения в версии 5.1

# grep -A5 3600 mpeg4videoenc.c
    if (time_incr > 3600) {
        av_log(s->avctx, AV_LOG_ERROR, "time_incr %"PRIu64" too large\n", time_incr);
        return AVERROR(EINVAL);
    }

wolverin ★★★
() автор топика
Ответ на: комментарий от hizel

я взял просто пример muxing.c

в котором заменил

avformat_alloc_output_context2(&pOutFmtCtx, NULL, «rtsp», rtsp_url);

и сам кодек получил как

pOutCdc = avcodec_find_encoder(pOutFmt->video_codec);

av_dump_format говорят так

Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 192129.114057, bitrate: N/A
  Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1920x1080, 15 fps, 15 tbr, 1000k tbn
Output #0, rtsp, to 'rtsp://IP:554/cam':
  Stream #0:0: Video: mpeg4, yuv420p, 640x480, q=2-31, 400 kb/s, 15 tbn

явно конечно libx264 не задавал, но муксин.с ведь работает

wolverin ★★★
() автор топика
Ответ на: комментарий от hizel

по большому счету это пока роли не играет, хотел просто для начала передать пакеты, т.е. если попробовать явно указать AV_CODEC_ID_H264 это избавит от проблемы времени!?

формально конечно гугл говорит х264 вытекает из мпег4, поэтому не придал пока большого значения явному указанию.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

сложно сказать о чем вы разговаривали с гуглом; сейчас у вас ошибка в районе mpeg4, вы собираетесь использовать h264(одобряю) и тут логично решать проблемы с h264, зачем это делать с mpeg4 реализацией энкодера ffmpeg

hizel ★★★★★
()
Ответ на: комментарий от hizel

Ок, завтра проверю, просто штатный пример ффмпега мукс.с не имеет этой ошибки, однако поток они там рисуют и кодируют, а не перекодирует, тут у меня и возник затык, хотя там без разницы мпег4,2 или 1

wolverin ★★★
() автор топика
Ответ на: комментарий от hizel

чудны дела твои Хоспади!

указал явно кодек и проблема передачи видео ушла, теперь так дампы выглядят

Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 343916.459846, bitrate: N/A
  Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1920x1080, 15 fps, 15 tbr, 1000k tbn
[libx264 @ 0x14e82c0] using cpu capabilities: ARMv6 NEON
[libx264 @ 0x14e82c0] profile Constrained Baseline, level 2.2
[libx264 @ 0x14e82c0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=12 keyint_min=1 scenecut=0 intra_refresh=0 rc=abr mbtree=0 bitrate=500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, rtsp, to 'rtsp://IP:554/cam':
  Stream #0:0: Video: h264, yuv420p, 640x480, q=2-31, 500 kb/s, 15 tbn

Получается ффмпег ждет что в мпег4 я буду кодировать ФАЙЛ конечной длинны, а не поток!?

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)