[Libav-user] HLS: Exactly constant segment duration

Anshul er.anshul.maheshwari at gmail.com
Mon Aug 19 12:03:37 CEST 2013


On 08/19/2013 03:18 PM, Andrey Mochenov wrote:
> Hi,
> Thank you for your answer.
> I suppose, IDR stands for Instantaneous Decoding Refresh.
> Please, explain: what do you mean under "set encoder with all idr"?
>
> What settings I need to use?
> Andrey.
> On Mon, Aug 19, 2013 at 10:48 AM, Anshul maheshwari 
> <er.anshul.maheshwari at gmail.com 
> <mailto:er.anshul.maheshwari at gmail.com>> wrote:
>
>     Please dont top post over here
>
>     Try to set encoder with all idr,  that may give you const duration
>
>     On Aug 15, 2013 4:59 PM, "Andrey Mochenov" <andrey2067 at gmail.com
>     <mailto:andrey2067 at gmail.com>> wrote:
>     >
>     > Hi,
>     >
>     > We are using FFmpeg libraries git-ee94362 libavformat v55.2.100.
>     > Our purpose is to mux two streams (video and audio) into M3U8
>     playlist using HLS.
>     > In addition, we want the duration of every TS segment file be
>     exactly 3.0 sec (frame rate is 25 fps).
>     > To reach it, we are trying to set several options and
>     properties, namely:
>     > - segment_time
>     > - keyint_min
>     > - scenechange_threshold
>     > - gop_size
>     > - force_key_frames.
>     >
>     > And our code looks as below:
>     >
>     > AVCodecContext *codec_ctx = NULL;
>     > AVFormatContext *ofmt_ctx = NULL;
>     > int ret = 0, gopSize = (int)(3.0 * 25);   // 3 sec * 25 fps
>     >
>     > // ofmt_ctx and codec_ctx initialization and filling are OK, but:
>     >
>     > codec_ctx->time_base.num = 1;
>     > codec_ctx->time_base.den = 25 // fps
>     >
>     > // It seems, that the following three lines have no effect
>     without explisit setting of the "hls_time" property
>     > codec_ctx->keyint_min = gopSize;       // in FFMpeg application,
>     the corresponding option is "-keyint_min 3"
>     > codec_ctx->scenechange_threshold = 0;  // in FFMpeg application,
>     the corresponding option is "-sc_threshold 0"
>     > codec_ctx->gop_size = gopSize;         // in FFMpeg application,
>     the corresponding option is "-g 3"
>     >
>     > ret = av_opt_set_double(ofmt_ctx, "hls_time", 3.0,
>     AV_OPT_SEARCH_CHILDREN);
>     >
>     > // Any of the following lines causes "Option not found" error.
>     > ret = av_opt_set(codec_ctx->priv_data, "profile", "main",
>     AV_OPT_SEARCH_CHILDREN);
>     > ret = av_opt_set(codec_ctx->priv_data, "preset", "ultrafast",
>     AV_OPT_SEARCH_CHILDREN);
>     > ret = av_opt_get(ofmt_ctx, "segment_time",
>     AV_OPT_SEARCH_CHILDREN, &str);
>     > ret = av_opt_set((ofmt_ctx, "segment_time", "3.0",
>     AV_OPT_SEARCH_CHILDREN);
>     >
>     > Anyway, the TS files durations are different, (~2-3 sec), and
>     not EXACTLY 3.0 sec.
>     > Our question: What is the best way to solve the problem?
>     >
>     > Andrey Mochenov.
>     >
>     >
>
>     > _______________________________________________
>     > Libav-user mailing list
>     > Libav-user at ffmpeg.org <mailto:Libav-user at ffmpeg.org>
>     > http://ffmpeg.org/mailman/listinfo/libav-user
>     >
>
>     Please dont top post over here
>
>     Try to set encoder with all idr,  that may give you const duration
>
>
>     _______________________________________________
>     Libav-user mailing list
>     Libav-user at ffmpeg.org <mailto:Libav-user at ffmpeg.org>
>     http://ffmpeg.org/mailman/listinfo/libav-user
>
>
>
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user


*I am reminding you again, please don't top post on this mailing list.

*While cutting the video , segmenter over ride the segement-time if at 
that time  IDR is not the frame.
so if you have less interval between idr, than there are probability 
that segmenter does not over-ride the segment-time. just to verify that 
you are facing the same problem set your encoder IDR interval as 0 or 1,

-Anshul



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20130819/1cfd50a7/attachment.html>


More information about the Libav-user mailing list