コード例 #1
0
ファイル: segmenter.c プロジェクト: midnox/mediasegmenter
/**
 * @brief finish segment
 * @param context segmenter context
 * @return 0 on success, negative error code on failure
 */
static int finish_segment(SegmenterContext *context) {
    AVFormatContext *output = context->output;
    size_t size;
    int    ret;
    
    avio_flush(output->pb);
    size = avio_size(output->pb);
    avio_close(output->pb);
    
    context->max_bitrate = max(context->max_bitrate, size * 8 / context->segment_duration);
    context->avg_bitrate = (context->avg_bitrate * context->segment_index + (size * 8 / context->segment_duration)) / (context->segment_index + 1);
    
    if ((ret = set_segment_duration(context, context->segment_index, context->segment_duration))) {
        return ret;
    }
    
    context->segment_index++;
    context->segment_duration = 0;
    
    return 0;
}
コード例 #2
0
bool DashVideoSegmenter::init(size_t segmentDuration, size_t timeBase, size_t sampleDuration, size_t width, size_t height, size_t framerate) 
{
    uint8_t i2error;

    this->width = width;
    this->height = height;
    this->framerate = framerate;

    i2error = generate_context(&dashContext, VIDEO_TYPE);

    if (i2error != I2OK) {
        return false;
    }

    i2error = fill_video_context(&dashContext, width, height, framerate, timeBase, sampleDuration);

    if (i2error != I2OK) {
        return false;
    }

    set_segment_duration(segmentDuration, &dashContext);
    return true;
}