我有一个解决方案,我使用Media Foundation的h264编码器从网络摄像头编码视频(YUY2)样本.然后我通过TCP连接将其发送到另一个应用程序,该应用程序使用Media Foundation的h264解码器将流解码为YUY2格式.解码后,使用DirectX在屏幕上显示视频样本/图像.
问题是在关键帧之间,视频图像会产生越来越多的伪像.收到关键帧时,伪像消失.
我将TCP连接从示波器中删除,并在编码后立即进行解码,但我仍然有困扰我的工件.
这是从网络摄像头接收样本的回调方法:
//-------------------------------------------------------------------
// OnReadSample
//
// Called when the IMFMediaSource::ReadSample method completes.
//-------------------------------------------------------------------
HRESULT CPreview::OnReadSample(
HRESULT hrStatus,
DWORD /* dwStreamIndex */,
DWORD dwStreamFlags,
LONGLONG llTimestamp,
IMFSample *pSample // Can be NULL
)
{
HRESULT hr = S_OK;
IMFMediaBuffer *pBuffer = NULL;
EnterCriticalSection(&m_critsec);
if (FAILED(hrStatus))
{
hr = hrStatus;
}
if (SUCCEEDED(hr))
{
if (pSample)
{
IMFSample *pEncodedSample = NULL;
hr = m_pCodec->EncodeSample(pSample, &pEncodedSample);
if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT || pEncodedSample == NULL)
{
hr = m_pReader->ReadSample((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, …Run Code Online (Sandbox Code Playgroud)