2017-06-12 7 views
1

i Videodaten von meiner Web-Kamera bekam, und ffmpeg mit ts zu machen, m3u8die Anzahl der Frames in TS-Datei

aber ts, was von ffmpeg, die jeweils ts hat andere die Anzahl der Frames.

also, wie kann ich die anzahl der bilder gleich?

und jede GOP-Größe in ts sind auch anders ..

wie kann ich GOP-Größe machen konstant ist?

avformat_alloc_output_context2(&ptr->hls_ctx, NULL, "hls", "hls.m3u8"); 
((HLSContext*)ptr->hls_ctx->priv_data)->flags = HLS_DELETE_SEGMENTS | HLS_ROUND_DURATIONS; 
((HLSContext*)ptr->hls_ctx->priv_data)->max_nb_segments = 2; 
((HLSContext*)ptr->hls_ctx->priv_data)->time = 2; 

i verwenden Zeitparameter bereits für ts die Einstellung Spielzeit

+0

H.264 ist teilweise sehr effizient, weil die Datenstromminimierungsalgorithmen durch Änderungen am Eingangspixelfluss gesteuert werden ... Ihr Wunsch nach konstanten Datenstücken steht angesichts dieser effizienten Designziele auf dem Spiel ... bitte aktualisieren Sie Ihre Frage mit dem Ziel, das Sie versuchen zu erreichen –

+0

@ScottStensland Er braucht wahrscheinlich Keyframe-ausgerichtete Streams und er verwendet eine Live-Quelle, daher kann er nicht zwei-Pass, um synchronisierte adaptive GOPs zu bekommen. – aergistal

Antwort

0

Sie können die GOP-Größe im Encoder Kontext gesetzt:

codec = avcodec_find_encoder(AV_CODEC_ID_H264); 
c = avcodec_alloc_context3(codec); 
[...] 
c->gop_size = 10; 

Voll Beispiel in doc/examples/encode_video.c (oder sehen Github).

+0

yeah ich bereits getan .. mit diesem code ptr-> output_vctx-> gop_size = 8; ptr-> output_vctx-> keyint_min = 8; ptr-> output_vctx-> scenechange_threshold = 1; aber in ts-Datei ist die Schlüsselbildposition wie diese .. 0 - 8 - 12 - 20 - 26 - 34 - 41 - 49 - 54 ... Warum ?! –

+0

@ j.teak Versuchen Sie, die Szenenerkennung zu deaktivieren (setzen Sie "sc_threshold" auf Null). Probieren Sie es zuerst im CLI aus. – aergistal

Verwandte Themen