FFMPEG C ++ av_write_uncoded_frame (out_pFormatCtx, frame_index, pFrameRGB); - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь найти способ скопировать мои данные opencv в мой выходной поток RTMP после декодирования потока

avcodec_decode_video2.

Но когда я использую ret = av_write_uncoded_frame (out_pFormatCtx,frame_index, pFrameRGB) ;

, я получил ошибку -40 из переменной 'ret'.

ret = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);// Decode video frame
if (frameFinished)
{
    static struct SwsContext* img_convert_ctx;
    if (img_convert_ctx == NULL)
    {
        int w = pCodecCtx->width;
        int h = pCodecCtx->height;

        img_convert_ctx = sws_getContext(w, h,
            pCodecCtx->pix_fmt,
            w, h, AV_PIX_FMT_RGB24, 4,
            NULL, NULL, NULL);
        if (img_convert_ctx == NULL)
        {
            fprintf(stderr, "Cannot initialize the conversion context!\n");
            return -1;
        }
    }
    int ret = sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);
    if (ret == 0)
    {
        fprintf(stderr, "SWS_Scale failed [%d]!\n", ret);
        return -2;
    }
    // Save the frame to disk
    if (Save>0)
    {
        SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, frame_index);
    }
    if (Show > 0)
    {
        CopyDate(pFrameRGB, pCodecCtx->width, pCodecCtx->height, packet.pts - prepts);
        //ret = av_write_uncoded_frame(out_pFormatCtx, frame_index, pFrameRGB);........<<<error -40

        if (!out_pFormatCtx->oformat->write_uncoded_frame)
        {
            return AVERROR(ENOSYS);
        }


    }
    frame_index++;
}
...