我有一个包含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数据。
答案 0 :(得分:0)
我的错-这段代码可以正常工作-我正在将int输出与在记事本中查看的ffmpeg输出进行比较-当我使用notepad ++时-我可以理解ffmpeg的输出,并且确实具有相关性:)