Я использую imftransform для декодирования файла H264, который кодируется Android. Я проверил, что формат файла является Приложением B, поэтому я использую MFVideOformat_H264_ES , но он будет успешно выполнять только в течение примерно 20 раз. Тогда это сломается без какой -либо ошибки. Когда я отлаживаю программу, она переходит через эту строку и никогда больше не работает. < /P>
Код: Выделить всё
IMFMediaBuffer* buffer = NULL;
hr = MFCreateMemoryBuffer(l, &buffer);
DWORD pcbMaxLength, pcbCurrentLength = 0;
BYTE* ppbBuffer = NULL;
buffer->Lock(&ppbBuffer, &pcbMaxLength, &pcbCurrentLength);
memcpy_s(ppbBuffer, l, buff, l);
buffer->SetCurrentLength(l);
buffer->Unlock();
IMFSample* sample = NULL;
hr = MFCreateSample(&sample);
if (SUCCEEDED(hr)) {
sample->AddBuffer(buffer);
hr = transform->ProcessInput(0, sample, 0);
while (FAILED(hr)) {
hr = transform->ProcessInput(0, sample, 0);
std::this_thread::sleep_for(std::chrono::milliseconds(30));
}
sample->Release();
}
buffer->Release();
< /code>
Этот код запускается на некоторое время. Сначала я буду Recv
Buff через розетку, а затем FeedInput . Тогда мне интересно, является ли это ошибкой. Итак, я не использую цикл Whole и попробую еще раз. Я сохраняю H264 в файл примерно на 10 секунд (убедитесь, что он может сыграть игрок). Затем подайте в IMFTransform , но я могу запустить только процесс -аут. () примерно в 20 раз. Таким образом, либо данные плохие, либо мой код не верен? Если я не использую все это в порядке. Так что это не бизнес Android.>
Подробнее здесь:
https://stackoverflow.com/questions/796 ... only-300ms