Video-Format-MPG & MCI

titanic

Mitglied
Hallo Leute,

für das Abspielen von Video-Dateien benutzte ich das Media Control Interface,
Das meiste für die Implementierung übernahm ich aus einem Beispiel.

AVI- und WMV-Dateien werden perfekt dargestellt.
Bei MPG-Dateien habe ich gewisse Probleme:

1. das Öffnen und Abspielen des Devices daert viel zu lange.
2. das Bild ist entweder verdeckt, oder wird nicht aktualisiert.

Kann mir jemand helfen?
Bin für jeden Beitrag dankbar!

Ich mein Sourcecode:
Code:
void CMediaFileLogisticsFormView::OnBnClickedButtonPlay()
{
	if (m_bDeviceOpen == true)
	{
		PlayMPegVideoDevice();
	}
}



// Memberfunktionen
bool CMediaFileLogisticsFormView::OpenMPegVideoDevice()
{
	char cmd[300];
	
//	if (m_bDeviceOpen == true)
//	{
	CloseMPegVideoDevice();
//	}
	if(m_strFullPathName == "")
	{
		return false;
	}

	//   MPEG_VIDEO_DEVICE öffnen
	wsprintf(cmd, "open \"%s\" alias MPEG_VIDEO_DEVICE type MPEGVideo style child", m_strFullPathName);
	if (mciSendString(cmd, 0, 0, 0) != 0)
	{
		AfxMessageBox("MCI-Error: Kann Datei nicht öffnen!");
		return false;;
	}
	//   MPEG_VIDEO_DEVICE wurde geöffnet
	m_bDeviceOpen = true;

	//   MPEG_VIDEO_DEVICE handle setzen(Parent)
	wsprintf(cmd, "window MPEG_VIDEO_DEVICE handle %lu", m_ctrlAnimateMedial.GetSafeHwnd());
	if (mciSendString(cmd, 0, 0, 0) != 0)
	{
		AfxMessageBox("MCI-Error: Kann window handle nicht setzen");
		return false;
	}

	//Fenstergröße des Animationsfeldes ermitteln
	CRect  rect;
	m_ctrlAnimateMedial.GetClientRect(&rect);
	
	//   MPEG_VIDEO_DEVICE Fenster anpassen
	wsprintf(cmd, "put MPEG_VIDEO_DEVICE destination at %d %d %d %d", 0, 0, rect.right, rect.bottom);
	if (mciSendString(cmd, 0, 0, 0) != 0)
	{
		AfxMessageBox("MCI-Error: Kann Fenstergröße nicht anpassen");
		return false;
	}
	return true;
}
bool CMediaFileLogisticsFormView::PlayMPegVideoDevice()
{
	char cmd[300];

	//   MPEG_VIDEO_DEVICE abspielen
	wsprintf(cmd, "play MPEG_VIDEO_DEVICE from 0");
	if (mciSendString(cmd, 0, 0, 0) != 0)
	{
		AfxMessageBox("MCI-Error: Kann Datei nicht abspielen!");
		return false;//-1;
	}
	return true;
}

bool CMediaFileLogisticsFormView::StopMPegVideoDevice()
{
	char cmd[300];
	wsprintf(cmd, "stop MPEG_VIDEO_DEVICE");
	if (mciSendString(cmd, 0, 0, 0) != 0)
	{
		AfxMessageBox("MCI-Error: Kann Datei nicht anhalten!");
		return false;
	}
	return true;
}
bool CMediaFileLogisticsFormView::CloseMPegVideoDevice()
{
	if (m_bDeviceOpen == true)
	{
		char cmd[300];
		wsprintf(cmd, "close MPEG_VIDEO_DEVICE");
		if (mciSendString(cmd, 0, 0, 0) != 0)
		{
			AfxMessageBox("MCI-Error: Kann Datei nicht schließen!");
			return false;
		}
		m_bDeviceOpen = false;
	}
	return true;
}

void CMediaFileLogisticsFormView::OnBnClickedButtonStop()
{
	StopMPegVideoDevice();
}

bool CMediaFileLogisticsFormView::PreviewMPegVideoDevice()
{
	bool bOK;
	bOK = OpenMPegVideoDevice();
	if (bOK == true)
	{
		bOK = PlayMPegVideoDevice();
		if (bOK == true)
		{
			bOK = StopMPegVideoDevice();
		}
	}
	return bOK;
}
 
Hallo,

ich hab's raus!
mir fehlte der Mpeg2-decoder.

Datei Mpeg2DecFilter.ax
in C:\Windows\System32\ kopieren

und registrieren:

In der DOS Eingabeaufforderung
mit
regsvr32 Mpeg2DecFilter.ax
registrieren.
Deinstalliert wird der Filter
mit
regsvr32 -u Mpeg2DecFilter.ax
 

Neue Beiträge

Zurück