Thanks ! Updated to AV_LOG_WARNING, 2nd version patch is here https://patchwork.ffmpeg.org/patch/12237/
On Thu, Mar 7, 2019 at 1:39 AM Steven Liu <lingjiujia...@gmail.com> wrote: > Jun Li <junli1...@gmail.com> 于2019年3月6日周三 上午3:25写道: > > > > From: jun <junli1...@gmail.com> > > > > Calculate bitrate based on fragment size, only applied when > > bitrate is not set, for example rtsp source. > > > > Signed-off-by: Jun Li <junli1...@gmail.com> > > --- > > libavformat/smoothstreamingenc.c | 30 +++++++++++++++++++++++++----- > > 1 file changed, 25 insertions(+), 5 deletions(-) > > > > diff --git a/libavformat/smoothstreamingenc.c > b/libavformat/smoothstreamingenc.c > > index 094712af27..1d969ab037 100644 > > --- a/libavformat/smoothstreamingenc.c > > +++ b/libavformat/smoothstreamingenc.c > > @@ -320,11 +320,12 @@ static int ism_write_header(AVFormatContext *s) > > AVDictionary *opts = NULL; > > > > if (!s->streams[i]->codecpar->bit_rate) { > > - av_log(s, AV_LOG_ERROR, "No bit rate set for stream %d\n", > i); > > - ret = AVERROR(EINVAL); > > - goto fail; > > + av_log(s, AV_LOG_WARNING, "No bit rate set for stream > %d\n", i); > > + snprintf(os->dirname, sizeof(os->dirname), > "%s/QualityLevels(Tmp_%"PRId64")", s->url, i); > > + } else { > > + snprintf(os->dirname, sizeof(os->dirname), > "%s/QualityLevels(%"PRId64")", s->url, s->streams[i]->codecpar->bit_rate); > > } > > - snprintf(os->dirname, sizeof(os->dirname), > "%s/QualityLevels(%"PRId64")", s->url, s->streams[i]->codecpar->bit_rate); > > + > > if (mkdir(os->dirname, 0777) == -1 && errno != EEXIST) { > > ret = AVERROR(errno); > > av_log(s, AV_LOG_ERROR, "mkdir failed\n"); > > @@ -519,7 +520,7 @@ static int ism_flush(AVFormatContext *s, int final) > > > > for (i = 0; i < s->nb_streams; i++) { > > OutputStream *os = &c->streams[i]; > > - char filename[1024], target_filename[1024], > header_filename[1024]; > > + char filename[1024], target_filename[1024], > header_filename[1024], curr_dirname[1024]; > > int64_t size; > > int64_t start_ts, duration, moof_size; > > if (!os->packets_written) > > @@ -541,6 +542,25 @@ static int ism_flush(AVFormatContext *s, int final) > > size = os->tail_pos - os->cur_start_pos; > > if ((ret = parse_fragment(s, filename, &start_ts, &duration, > &moof_size, size)) < 0) > > break; > > + > > + if (!s->streams[i]->codecpar->bit_rate) { > > + int64_t bitrate = (int64_t) size * 8 * AV_TIME_BASE / > av_rescale_q(duration, s->streams[i]->time_base, AV_TIME_BASE_Q); > > + if (!bitrate) { > > + av_log(s, AV_LOG_ERROR, "calculating bitrate get > zero."); > > + ret = AVERROR(EINVAL); > > + return ret; > > + } > > + > > + av_log(s, AV_LOG_INFO, "calculated bitrate: %ld\n", > bitrate); > maybe use AV_LOG_DEBUG or AV_LOG_WARNING is better than AV_LOG_INFO > here, this should unnecessary message default. > > + s->streams[i]->codecpar->bit_rate = bitrate; > > + memcpy(curr_dirname, os->dirname, sizeof(os->dirname)); > > + snprintf(os->dirname, sizeof(os->dirname), > "%s/QualityLevels(%"PRId64")", s->url, s->streams[i]->codecpar->bit_rate); > > + snprintf(filename, sizeof(filename), "%s/temp", > os->dirname); > > + > > + if ((ret = ff_rename((const char*)curr_dirname, > os->dirname, s)) < 0) > > + return ret; > > + } > > + > > snprintf(header_filename, sizeof(header_filename), > "%s/FragmentInfo(%s=%"PRIu64")", os->dirname, os->stream_type_tag, > start_ts); > > snprintf(target_filename, sizeof(target_filename), > "%s/Fragments(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); > > copy_moof(s, filename, header_filename, moof_size); > > -- > > 2.17.1 > > > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel