I’m trying to use the following code to configure the library to live stream
via RTMP. I’ve found a couple problems that I can’t seem to work out.
1. The bit rate is not well controlled at all. I may end up streaming at a rate
twice my _encoder_preset.bitRate. How can I control it better? I’ve tried
using:
cc->rc_max_rate
cc->rc_min_rate
cc->buffer_size
They have not worked at all, as far as I can tell. I even set min and max to 0
to test prove they have no impact.
2. With some video sources I can see when my keyframes kick in. It’s
especially when I have a live camera on a zoomed out image of something almost
static. Every 2 seconds I can see the less detailed areas of the image shift
their color slightly. How can I optimize so that they keyframes are not
noticeable at all?
3. When I stream a static image for some number of minutes, then switch to a
different image, my CPU and packet rate go way up (3X) for some period for a
few minutes. The longer I stream the static image before I cut to a different
scene, the worse the impact. This issue does not happen unless the initial
scene is almost 100% static for a while. I think this problem is something to
do with my settings below, but I can’t be sure. What could this problem be?
AVCodecContext *cc = _stream_video->codec;
cc->codec_type = AVMEDIA_TYPE_VIDEO;
cc->codec_id = AV_CODEC_ID_H264;
cc->width = (_encoder_preset.width + 1 ) / 2 * 2 ; // using 1280
cc->height = _encoder_preset.height; //using 720
cc->bit_rate = _encoder_preset.bitRate * 1024; // using 3300 for bitRate
cc->bit_rate_tolerance = cc->bit_rate * .1; // trying to restrict variance
to 10%
cc->time_base.num = 1;
cc->time_base.den = _encoder_preset.framesPerSecond; //using 30fps
cc->pix_fmt = AV_PIX_FMT_YUV420P;
cc->coder_type = 1;
cc->flags |= CODEC_FLAG_LOOP_FILTER;
cc->flags |= CODEC_FLAG_CLOSED_GOP;
cc->me_cmp |= 1;
cc->me_method = ME_HEX;
cc->me_subpel_quality = 4;
cc->me_range = 16;
cc->gop_size = _encoder_preset.keyFrameInSecs *
_encoder_preset.framesPerSecond; //using 60 frames
cc->keyint_min = 9;
cc->scenechange_threshold = 40;
cc->i_quant_factor = 0.71;
cc->b_frame_strategy = 1;
cc->qcompress = 0.6;
cc->qmin = 10;
cc->qmax = 51;
cc->max_qdiff = 4;
cc->max_b_frames = 3;
cc->refs = 6;
cc->trellis = 1;
cc->profile = FF_PROFILE_H264_HIGH;
av_opt_set(cc->priv_data, "profile","high",0);
av_opt_set(cc->priv_data, "preset", "fast", 0);
Thanks!
af_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user