RSS 2.0 Feed
多媒体(Multimedia)
摘要: 创建一个win32DLL工程,从DXSDK示例Ball复制代码之后就出这个问题 Deleting intermediate files and output files for project 'FScrCap - Win32 Debug'.--------------------Configuration: FScrCap - Win32 Debug--------------------Compiling...Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86Copyright Microsoft Corp 1984-1998. All rights reserved.cl? /MTd /Ze /W3 /Gm /Gi /GR- /GX /ZI /Od /D WIN32 /D _DEBUG /D _WINDOWS /D _MBCS /D _USRDLL /D FSCRCAP_EXPORTS /FpDebug/FScrCap.pch /Ycstdafx.h /FoDebug/ /FdDebug/ /FD /GZ /c F:\code\test\DirectShow\FScrCap\StdAfx.cppStdAfx.cppCompiling...Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86Copyright Microsoft Corp 1984-1998. All rights reserved.cl? /MTd /Ze /W3 /Gm /Gi /GR- /GX /ZI /Od /D WIN32 /D _DEBUG /D _WINDOWS /D _MBCS /D _USRDLL /D FSCRCAP_EXPORTS /FpDebug/FScrCap.pch /Yustdafx.h......[阅读全文]

posted @ | Feedback (9) | Filed Under [ CSDN 编译(CodeGen) 调试技巧(Debugging) 多媒体(Multimedia) 集成开发环境(IDE) 平台SDK(Platform SDK) ]

摘要:字符串处理日常编程都会用到,没想到今天在上面栽了个跟斗 今天编译代码的时候,VC的编译器居然报告函数lstrlenWInternal没有实现,我倒,我没写过这个函数啊,看起来是函数lstrlenW的内部实现? 找遍代码(VC的Source Browser以及Google)也没有发现这个函数的蛛丝马迹 开始找这个函数的调用代码。首先怀疑的是刚刚增加的功能(废话,这个工程昨天还可以编译通过),但是去掉了增加的功能之后还是不能编译通过,我再倒。最后用最原始的WinDiff比较代码+分段注释定位法发现是OLE2T调用出的问题。 加这个调用的原因是今天觉得在一个ATL的CComBSTR字符串里面查找写起来代码太多,用OLE2T宏转成CString,然后用MFC里面CString的ReverseFind方法比较简单,就把一个成员变量的类型从CComBSTR改成CString了。哪知道用了无数次的OLE2T会出状况。 现在在赶进度,懒得查,就用CString的构造函数处理这个转换了 // Set the new file name.//m_bstrURL=pwszURL;//昨天的//m_strURL=OLE2T(pwszURL);//今天的m_strURL=CString(pwszURL);//今天的第二版 不过按理说语法上不应该有什么问题……迷惑中...[阅读全文]

posted @ | Feedback (8) | Filed Under [ 随笔 多媒体(Multimedia) 平台SDK(Platform SDK) 语言(Language) ]

摘要:在播放有多路视频的媒体的时候,Windows Media Player控件居然会弹出一个无法控制的窗口播放第二路视频。有人知道怎么用脚本控制Windows Media Player的这个窗口么? http://jiangsheng.vicp.net/mydoc/HTMLPage1.htm 现在还有两个问题,一个是在CPU忙的时候声音变调和断续,另外一个是视频采集设备有时候启动超时。...[阅读全文]

posted @ | Feedback (4) | Filed Under [ 随笔 用户界面 多媒体(Multimedia) 类库(Library) ]

摘要:为什么DirectX9和以前版本有如此大的不同……用DirectX9SDK开发的程序,在DirectX版本较低的计算机上运行的话,性能有可观的降低……...[阅读全文]

posted @ | Feedback (5) | Filed Under [ 随笔 多媒体(Multimedia) ]

摘要:?祝大家新年快乐! 武汉的公交车都是1.2元,所以身上经常揣着一大把硬币。昨天晚上买火车票回北京的时候忘记取钱,结果钞票不够,加上三十余元硬币才勉强凑够车票钱——当然是硬座——身上最后还剩一块多钱…… P.S.手机充电器忘在武汉了……春节回去拿…… 高效屏幕录制 屏幕录制有着广泛的用途,主要用于建立演示培训,或者远程屏幕监视和广播。由于屏幕的大小和色深通常很高,而且具有大块背景色、窗口拖动/卷动造成的内容移动和菜单弹出造成的瞬时变化等特性,因此需要在数据采集、压缩和传输/存储上多加考虑。 录制之前 录制之前,应该选择录制方法,压缩方式和录制范围。 有必要尽可能缩小录制的区域以减少数据量。在录制开始之前,可以让用户指定录制的范围,例如全屏幕,指定窗口,指定/自适应坐标等等。小的录制区域意味着更少的原始数据。 尽可能降低录制的色深以减少数据量。通常,用于简单教学的录制只需要256色。 录制之前,应该停用屏幕保护,桌布和活动桌面的一些特性以避免不必要的录制。 录制方法 录制分两种方式,一种是推模式,也就是录制模块不断录制数据,一种是拉模式,录制模块在需要的时候才录制数据。对于低带宽的场合,拉模式可以有效的减少原始数据量。对于需要基本无损回放的场合,推模式在监测到屏幕变化时就录制数据,可以减少视频质量的损失。在推模式下需要选取录制的时机,以避免大量的重复数据。 压缩编码 适当的编码方式可以有效地减少录制时的资源占用。 联合图像专家组(Joint Photographic Experts Group,JPEG)编码在有损压缩时,对于静态图像具有比较好的压缩比率。但是有损压缩可能会使得屏幕上的文字变得模糊。 运动图像专家(MPEG)组编码适合运动的图像,但是剧烈变化的图像,例如菜单的弹出,可能会暂时使录制的视频质量降低,以及CPU资源占用的升高。 远程帧缓冲(Remote Frame Buffer,RFB)编码包括对于窗口拖动/卷动造成的内容移动造成的矩形复制(copy rectangle)和背景色的优化。对于每个矩形,可以有各种不同的编码方式,例如MPEG或者JPEG。 分块比较编码将每次录制的屏幕分块和上次录制的屏幕内容比较,如果某块抽样变化了,那么编码整个块。对于每个块,可以有各种不同的编码方式,例如MPEG或者JPEG。 根据录制内容的不同,以及编码设置的不同(例如质量和分块大小设置),以上编码方式可能各有所长。 额外的考虑 扫描线隔行扫描而不是逐行扫描屏幕数据可以有效地减少录制的数据量,同时录制的视频质量降低不大。 录制时机虚拟显示设备或者适当的系统钩子可以使你在屏幕变化或者即将变化时得到通知,这样可以尽可能地减少录制的次数。参见http://ultravnc.sourceforge.net 以及http://www.realvnc.com 提供的VNC源代码中的VNCHooks。 DirectX使用DirectX可以进行直接的显存访问,这对提高性能很有好处。但是也由于DirectX的特性,某些使用DirectX等技术的程序可能无法录制,例如大多数游戏和媒体播放器,即使可以录制也比较慢。录制这样的程序的窗口内容的方法是局部或者全局地禁用部分或者全部DirectX加速功能。 机器码在录制和编码过程中,使用机器码模块可以有效地加强程序的性能。例如XVID的很多核心模块就是机器码。 分块的大小大的分块意味着录制时录制的次数少,但是小的分块可能意味着较少的数据量。对于依赖于背景色的编码方式,分块大小也影响数据量。 ? 其他录制内容 鼠标,水印和其他图像 在录制图像的同时,可能同时需要在屏幕内容上叠加其他图像,例如鼠标或者水印。这可以通过在每一次录制的图像上在指定位置上叠加指定的图像来完成。 //Draw the Cursor if (g_recordcursor==1) {??? ICONINFO iconinfo ; ??? BOOL ret;??? ret = GetIconInfo( hcur, &iconinfo ); ??? if (ret) {??????? xPoint.x -= iconinfo.xHotspot;??????? xPoint.y -= iconinfo.yHotspot;??????? //need to delete the hbmMask and hbmColor bitmaps??????? //otherwise the program will crash after a while after running out of resource??????? if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask);??????? if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor);??? } ??? :: DrawIcon( hMemDC, xPoint.x, xPoint.y, hcur); } 这里hMemDC包含已经录制的屏幕内容,hcur表示当前缓存的光标(因为光标不是每次录制都变化,所以缓存起来效率较高)。 音频 为了丰富媒体内容,可能有必要在录制屏幕时同时录制音频。屏幕录制占用了大量资源时,有可能造成音频的录制和压缩慢于预计的频率,结果是录制的媒体音调降低,以及可能的同步问题。 加密 如果录制的内容需要保密,那么必须考虑实施加密的性能和可行性。一般来说,为每个会话产生一个不同的密钥来进行初步的加密就可以了。 ?...[阅读全文]

posted @ | Feedback (86) | Filed Under [ CSDN 用户界面 多媒体(Multimedia) 平台SDK(Platform SDK) ]

摘要:Windows Multimedia API ICConfigure可以通知视频编码程序显示它的配置对话框。对于有经验的用户,这工作的很好。但是对于不了解视频编码程序的用户,面对一大堆鸟语设置肯定会晕头转向。 但是我只需要简单的设置带宽就可以了。 手头没有XVID的接口,所以用了类似修改游戏的方法来找到带宽设置在压缩参数中的地址 ??HIC hic = ICOpen(compressor_info[sel].fccType, compressor_info[sel].fccHandler, ICMODE_QUERY);????if (hic) {?????????//Set our current Video Compress State Info into the hic, which will update the ICConfigure Dialog#ifdef?_DEBUG???DWORD statesize = ICGetStateSize(hic);???LPBYTE?lpOldStart=NULL;???if(pVideoCompressParams){????lpOldStart=new BYTE[statesize];????memcpy(lpOldStart,pVideoCompressParams,statesize);???}#endif??????SetVideoCompressState (hic , compressor_info[sel].fccHandler);??????ICConfigure(hic,m_hWnd);??????//Get Video Compress State Info from the hic after adjustment with the ICConfigure dialog???//This will set the external pVideoCompressParams variable which is used? by AVICOMPRESSOPTIONS???//(This means the external variable pVideoCompressParams will be changed even if user press "Cancel")???GetVideoCompressState (hic , compressor_info[sel].fccHandler);?????????ICClose(hic);#ifdef?_DEBUG???if(lpOldStart){????LPBYTE lpNewStart=(LPBYTE )pVideoCompressParams;????for(int i=0;i阅读全文]

posted @ | Feedback (2) | Filed Under [ 随笔 调试技巧(Debugging) 多媒体(Multimedia) ]