关于用directshow(dspack)播放流视频的技术讨论 (5分)

  • 主题发起人 主题发起人 coocoo
  • 开始时间 开始时间
C

coocoo

Unregistered / Unconfirmed
GUEST, unregistred user!
我的思路是将流中的数据动态的放到一组(或数组)缓冲当中,将这个缓冲指向一个filter
的inputpin,然后render这个filter的outputpin实现播放。但怎样将缓冲指向filter
的inputpin呢?

欢迎大家参与讨论,也欢迎高人提供指点,最好有例子。

谢谢!
 
一般都是这样操作的.但是没有你说的这么简单. 如果你能做到把inputpin指向这个缓冲的话,你也就成功了.
这个操作需要你对filter编程很了解. 可以看看Directshow的memoryfile例子里面是怎么做的.
 
memfile只有C++的例子,没有delphi的,谁要是有可以给我一份
我的email:coocoo@19190.com

我手上有一个C++的程序,能实现这个功能,这个程序就是修改了memfile来实现的
但这个程序我不完全能看懂,也不会转换成delphi,哎,郁闷啊~~~~~
 
没人参与?嫌分太少?
大家交流一下嘛,这方面的东西C++的很多,不知道为什么delphi的几乎没有
 
因为Directshow的开发库和例子以及基础类都是基于vc++的.
 
是啊,delphi为什么这么衰呢,但这些VC++能实现的东西在delphi里也肯定能实现,只是
实现方法与VC++可能不完全一样。

不知道哪位高人对此有研究
 
问一下陈经滔,或许能对你有帮助,就是不知他是否愿意公开stream.dll的原码[:D][:D]
 
我手上有VC++的源码,只是我不知道怎么转成delphi,我不想用DLL
我不想找他,他动不动就谈钱,而且他的东西不一定适合我,我不知道他的DLL是用什么写的
如果是用VC++写的就没必要了。

其实,我估计他的DLL是用VC写的,他其实也只是修改了一个网友的免费源码而已,
我不知道他为什么会卖钱,而且还卖那么贵
 
to coocoo:
能否把c++的贴出来看看??
 
能否email我一份:
coolsoft@963.net
一起看看
 
coocoo,能否把C++的代码给我一份或帖出来
 
DSPACK 有没有,给我地址,我去下。。
 
哪位老大能贴一段c++的ds代码,小弟急用,谢了!
最好能完整的。
 
忘了问了,dspack支持对采集卡的视频捕捉吗?
 
貼出修改過的memfile文件!

//
// MemFilter.h
//
#ifndef __MemFilter_h__
#define __MemFilter_h__

#include <streams.h>
#include <stdio.h>
#include "asyncio.h"
#include "asyncrdr.h"
#include "CMediaSocketClient.h"
#include "CDataAdmin.h"
#include "MyDef.h"


//////////////////////////////////////////////////////////////////////
// Define an internal filter that wraps the base CBaseReader stuff //
//////////////////////////////////////////////////////////////////////
class CMemStream : public CAsyncStream
{
private:
CCritSec m_csLock;
CDataAdmin * m_pDataList;
ULONG m_ulPositionInPack;
// Total length available
LONGLONG m_llLength;
// Bytes totally read
DWORD m_dwTimeStart;

public:
CMemStream(CDataAdmin* inBuffer)
{
m_pDataList = inBuffer;
m_ulPositionInPack = 0;
m_llLength = 0;

}

HRESULT SetPointer(LONGLONG llPos)
{
return S_OK;
}

HRESULT Read(PBYTE pbBuffer,
DWORD dwBytesToRead,
BOOL bAlign,
LPDWORD pdwBytesRead)
{
if (m_pDataList == NULL)
return S_FALSE;

CAutoLock lck(&amp;m_csLock);
DWORD dwHaveRead = 0;
PMPEG1_PACK pPack = NULL;

while (dwHaveRead < dwBytesToRead)
{
if (dwBytesToRead - dwHaveRead >= MPEG1_PACK_SIZE - m_ulPositionInPack)
{
// Just copy the whole pack data
pPack = m_pDataList->GetDataBuffer();
if (pPack != NULL)
{
CopyMemory((PVOID)(pbBuffer + dwHaveRead),
(PVOID)((PBYTE)(pPack) + m_ulPositionInPack), (SIZE_T)MPEG1_PACK_SIZE - m_ulPositionInPack);
m_pDataList->ReleaseDataBuffer(pPack);
dwHaveRead += MPEG1_PACK_SIZE - m_ulPositionInPack;
m_ulPositionInPack = 0;
}
else
if (m_pDataList->IsFlushing())
{
// FILE * fp = fopen("c://log.txt","a+");
// fprintf(fp,"failed!/n");
// fclose(fp);

return E_FAIL;
}
else

{
// FILE * fp = fopen("c://log.txt","a+");
// fprintf(fp,"SLEEP!/n");
// fclose(fp);

Sleep(10);
}
}
else

{
// Copy part of the pack data
pPack = m_pDataList->PointToDataHead();
if (pPack != NULL)
{
m_ulPositionInPack = dwBytesToRead - dwHaveRead;
CopyMemory((PVOID)(pbBuffer + dwHaveRead),
(PVOID)(pPack), (SIZE_T)m_ulPositionInPack);
dwHaveRead += m_ulPositionInPack;
}
else
if (m_pDataList->IsFlushing())
{
// FILE * fp = fopen("c://log.txt","a+");
// fprintf(fp,"failed!/n");
// fclose(fp);

return E_FAIL;
}
else

{
// FILE * fp = fopen("c://log.txt","a+");
// fprintf(fp,"SLEEP!/n");
// fclose(fp);
Sleep(10);
}
}
}
*pdwBytesRead = dwBytesToRead;

return S_OK;
}

LONGLONG Size(LONGLONG *pSizeAvailable)
{
*pSizeAvailable = m_llLength;
return 0x7fffffffff;
}

DWORD Alignment()
{
return 1;
}

void Lock()
{
m_csLock.Lock();
}

void Unlock()
{
m_csLock.Unlock();
}

void AddAvailableLength(LONGLONG inLength)
{
m_llLength += inLength;
}
};

class CMemReader : public CAsyncReader
{
public:

// We're not going to be CoCreate'd so wedo
n't need registration
// stuff etc
STDMETHODIMP Register()
{
return S_OK;
}
STDMETHODIMP Unregister()
{
return S_OK;
}
CMemReader(CMemStream *pStream, CMediaType *pmt, HRESULT *phr) :
CAsyncReader(NAME("Mem Reader"), NULL, pStream, phr)
{
m_mt = *pmt;
}
};

#endif // __MemFilter_h__
 
请问安装dspack是否必须安装相应版本的directx,
哪位在bcb6下安装了dspack2.3,是不是前两
个包只用编译,第三个才用安装。急待解决。
谢谢!
 
没人知道吗
 
请教!dspack最新是版本是多少??????
哪里下!

还有如何控制声道!???????/

 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部