使用C ++和ffmpeg从mp2流中提取KLV数据

时间:2019-02-19 18:25:57

标签: c++ ffmpeg metadata

我有一个包含klv元数据的mp2流。我使用ffmpeg命令行将lvv存储在文件中:

ffmpeg -i input.mpg -map data-re -codec复制-f数据output.klv

我现在想用c ++做到这一点。所以,我有

FFMPEG设置.....

然后是主循环

// Read frames
while(av_read_frame(pFormatCtx, &packet) >= 0)
{
    // Is this a packet from the video stream?
    if(packet.stream_index == videoStream)
    {
        // Decode video frame
        avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

        // Did we get a video frame?
        if(frameFinished)
        {
            // Convert the image from its native format to RGB
            sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data,
                                pFrame->linesize, 0, pCodecCtx->height,
                                pFrameRGB->data, pFrameRGB->linesize);

            QImage myImage(pFrameRGB->data[0], pCodecCtx->width, pCodecCtx->height, QImage::Format_RGB888);

            QPixmap img(QPixmap::fromImage(myImage.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio)));

            ui->label->setPixmap(img);
            QCoreApplication::processEvents();
        }
    }
    else // klv stream
    {
        // Decode klv data
        qDebug() << packet.buf->size;
        for(int i=0; i<packet.buf->size; i++)
        {
            qDebug() << packet.buf->data[i];
        }
    }

最终的klv输出是不同的-我必须在处理数据包时做错了什么。框架很好,我正在用qt标签查看它-因此我的ffmpeg设置适用于图像,但不适用于klv数据。

1 个答案:

答案 0 :(得分:0)

我的错-这段代码可以正常工作-我正在将int输出与在记事本中查看的ffmpeg输出进行比较-当我使用notepad ++时-我可以理解ffmpeg的输出,并且确实具有相关性:)