void post_frame()

in sample/video_frame_producer_sample.c [103:190]


void post_frame(log_producer_client * client, video_frame * frame)
{
    if (client == NULL || frame == NULL)
    {
        return;
    }

    // 帧数据封装 start
    char * g_frame_keys[] = {
            (char *)"duration",
            (char *)"frame_data",
            (char *)"frame_flag",
            (char *)"decoding_timestamp",
            (char *)"presentation_timestamp",
            (char *)"extra_info"
    };

    size_t g_frame_keys_len[] = {
            strlen("duration"),
            strlen("frame_data"),
            strlen("frame_flag"),
            strlen("decoding_timestamp"),
            strlen("presentation_timestamp"),
            strlen("extra_info")
    };

    char * values[6];

    char duration[32];
    sprintf(duration, "%llu", (long long unsigned int)frame->duration);

    char frame_flag[32];
    sprintf(frame_flag, "%u", frame->frame_flag);

    char decoding_timestamp[32];
    sprintf(decoding_timestamp, "%llu", (long long unsigned int)frame->decoding_timestamp);

    char presentation_timestamp[32];
    sprintf(presentation_timestamp, "%llu", (long long unsigned int)frame->presentation_timestamp);

    values[0] = duration;
    values[1] = (char *)frame->frame_data;
    values[2] = frame_flag;
    values[3] = decoding_timestamp;
    values[4] = presentation_timestamp;
    values[5] = (char *)frame->extra_info;

    size_t values_len[] = {
            strlen(duration),
            frame->frame_data_size,
            strlen(frame_flag),
            strlen(decoding_timestamp),
            strlen(presentation_timestamp),
            frame->extra_info_size
    };

    // 帧数据封装 end


    // 调用producer接口发送数据
    log_producer_result rst = log_producer_client_add_log_with_len(client, 6, g_frame_keys, g_frame_keys_len, values, values_len);
    // 异常处理
    if (rst != LOG_PRODUCER_OK)
    {
        // 这边可以加入一些异常处理,如果是关键帧发送失败,可以每隔10ms重试一次,超过10次继续失败时再丢弃
        if ((frame->frame_flag & FRAME_FLAG_KEY_FRAME) != 0)
        {
            int try_time = 0;
            for (; try_time < 10; ++try_time)
            {
                usleep(10000);
                if (log_producer_client_add_log_with_len(client, 6, g_frame_keys, g_frame_keys_len, values, values_len) == LOG_PRODUCER_OK)
                {
                    break;
                }
            }
            if (try_time == 10)
            {
                printf("add key frame error %d \n", rst);
            }
        }
        else
        {
            printf("add normal frame error %d \n", rst);
        }
    }

}