I have tried whether to be able to publish live video streaming with Microsoft Media Foundation.
MF_LOW_LATENCY parameter can be used in Windows 8, but it seems that this doesn't become effective in encoding. It is an ideal that encoded data is created for every frame. Is this realizable?
MFCreateAttributes(&spattr, 10); spattr->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, TRUE); spattr->SetUINT32(MF_LOW_LATENCY, TRUE); spattr->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_FMPEG4); hr = MFCreateSinkWriterFromURL(NULL, outstream, spattr, &writer); RELEASE(spattr); if (FAILED(hr)) return false; MFCreateMediaType(&mediaout); mediaout->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); mediaout->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264); mediaout->SetUINT32(MF_MT_AVG_BITRATE, bitrate * 1024); mediaout->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive); MFSetAttributeSize(mediaout, MF_MT_FRAME_SIZE, width, height); MFSetAttributeRatio(mediaout, MF_MT_FRAME_RATE, fps, 1); MFSetAttributeRatio(mediaout, MF_MT_PIXEL_ASPECT_RATIO, 1, 1); hr = writer->AddStream(mediaout, &vindex); if (FAILED(hr)) goto EXIT; MFCreateMediaType(&mediain); mediain->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); mediain->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_ARGB32); mediain->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive); MFSetAttributeSize(mediain, MF_MT_FRAME_SIZE, width, height); MFSetAttributeRatio(mediain, MF_MT_FRAME_RATE, 60, 1); MFSetAttributeRatio(mediain, MF_MT_PIXEL_ASPECT_RATIO, 1, 1); hr = writer->AddStream(mediaout, &aindex); hr = writer->SetInputMediaType(vindex, mediain, NULL); if (FAILED(hr)) goto EXIT;