从ffmpeg读取输出的问题

时间:2016-08-03 15:31:05

标签: c++ ffmpeg piping

我正在尝试将原始BGR24图像数据从ffmpeg读入C ++应用程序。然后,C ++应用程序将使用openCV进一步处理图像。 jpg - > ffmpeg - >申请 - > OpenCV的

我首先将ffmpeg的输出存储到文件中,然后从应用程序中读取该文件。 OpenCV显然接受了这一点,因为它可以愉快地显示图像。 但是,当将ffmpeg的输出直接传递到应用程序的stdin时,它会失败。

我将程序更改为仅将输入保存到文件中,然后我比较了这两个文件。前1856个字节是相同的,但之后从stdin保存的文件不同,之后整个文件只是十六进制D1(或十进制209)。

bytes read from stdin

bytes read from file

我认为我在读取stdin而不是输出不同的ffmpeg时犯了一个错误。但我觉得很奇怪第一部分是一样的。 这是我用来读取标准输入的代码

char* img = (char*) malloc(FRM_SIZE_BYTES);
cout << "array address: " << &img;
cout << "array of size: " << FRM_SIZE_BYTES << endl;

int read = int read = read_stdin(img, FRM_SIZE_BYTES);
cout << "read " << read << " bytes" << endl;

int read_stdin(char* buffer, int count) 
{
    int read = 0;
    char in;
    for (int i = 0; i < count; i++) {
        cin >>  in;
        buffer[i] = in;
        read++;
    }
    return read;
}

这是我尝试阅读文件的方式

ifstream image;
image.open("img.raw", ios_base::binary | ios_base::in);
std::streampos start, end;  
char* imgFile = (char*)malloc(FRM_SIZE_BYTES);
image.read(imgFile, FRM_SIZE_BYTES);
image.close();

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

似乎问题在于读取标准输入。我正在使用Windows机器,并没有将输入流设置为二进制模式。

将输入流设置为二进制模式。

_setmode(_fileno(stdin), _O_BINARY);

并像这样阅读流

cin.get(in);

解决了这个问题。