实现DirectShow技术开发准备

实现DirectShow技术开发准备
实现DirectShow技术开发准备

C#实现DirectShow技术开发准备

时间:2009-10-21 23:45 点击:73次字体:[大中小]

DirectShow组件在“C:WINDOWSsystem32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。在转换过程中需要使用FrameWork SDK自带的TlbImp命令工具,该命令工具在“D:Program FilesMicrosoft Visual Studio 8SDKv2.0BinTlbImp.exe”目录下(取决于Visual Studio 2005的安装路径)。该命令的使用方法为:

TlbImp C:WINDOWSsystem32quartz.dll out:C:WINDOWSsystem32quartzDriectShow.dll

在DOS命令下执行转换成功。

转换完成后需在应用程序引用quartzDriectShow,引用quartzDriectShow.dll组件步骤如下:

(1)在Visual Studio 2005开发环境中,选择菜单“项目”/“添加引用”命令,弹出“添加引用”对话框。

(2)选择“浏览”选项卡,通过浏览找到引用quartzDriectShow.dll所在的位置,并引用到程序中来。

(3)最后引入using quartzDriectShow,在程序中可以开发相关多媒体程序了。

开发人员还可以通过编写自己的过滤器扩展DirectShow多媒体支持。下面是DirectShow组件的接口。

l IFilterGraph:过滤通道接口。

l IFilterGraph2:增强的IfilterGraph。

l IGraphBuilder:最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager。

l IMediaControl:用来控制流媒体(如流的启动和停止暂停等)播放控制接口。

l IMediaEvent:播放事件接口,该接口在FilterGraph发生一些事件时用来创建事件的标志信息并传送给应用程序。

l IMediaEventEx:扩展播放事件窗口。

l IMediaPosition:播放的位置和速度控制接口(控制播放放置只能为设置时间控制方式)。

l IMediaSeeking:另一个播放的位置和播放速度控制接口,在位置选择方面功能较强,设置播放格式。常用的控制播放方式有:TIME_FORMAT_MEDIA_TIME单位100纳秒;TIME_FORMAT_FRAME按帧播放。

l IBasicAudio:声音控制接口。

l IBasic Video:图像控制接口(波特率,宽度,长度等信息)。

l IVideoWindow:显示窗口控制接口(有关播放窗口的一切控制,包括caption显示,窗口位置控制等)。

l ISampleGrabber:捕获图像接口(可用于抓图控制)。

l IVideoFrameStep:控帛单帧播放的接口。

注意:使用DirectShow接口编程有3个步骤:初始化接口→利用接口中的控制函数使用控制操作→最后释放接口。

原文来自:雨枫技术教程网https://www.360docs.net/doc/178203645.html,

原文网址:https://www.360docs.net/doc/178203645.html,/plus/view-140098-1.html

一个用C#开发的DirectShow媒体播放器

(作者:Daniel Strigl)

关键字:一个用C#开发的DirectShow媒体播放器(作者:Daniel Strigl) 按"Browse..." 选择DirectShow COM DLL。

using QuartzTypeLib;

关于代码:

怎样建立DirectShow并选择媒体文件?

在选择了主菜单下的"File -> Open..."后,显示"Open File"对话框然后用户可以选择一个媒体文件。在C#中通过建立一个OpenFileDialog类对象并使用ShowDialog()方法来实现。OpenFileDialog openFileDialog = new OpenFileDialog();

openFileDialog.Filter = "Media Files|*.mpg;*.avi;*.wma;*.mov;" +

"*.wav;*.mp2;*.mp3|All Files|*.*";

if (DialogResult.OK == openFileDialog.ShowDialog())

{

.

.

.

在以上完成之后,我们开始建立了DirectShow并开始渲染媒体文件。

通过以下几步完成:

建立图象过滤管理(FGM)

建立图象过滤(通过FGM)

播放图象并返回事件

以下代码演示怎样建立图象过滤管理和图象过滤:

CollapseCleanUp();

m_objFilterGraph = new FilgraphManager();

m_objFilterGraph.RenderFile(openFileDialog.FileName);

m_objBasicAudio = m_objFilterGraph as IBasicAudio;

try

{

m_objVideoWindow = m_objFilterGraph as IVideoWindow;

m_objVideoWindow.Owner = (int) panel1.Handle;

m_objVideoWindow.windowstyle = WS_CHILD | WS_CLIPCHILDREN;

m_objVideoWindow.SetWindowPosition(panel1.ClientRectangle.Left,

panel1.ClientRectangle.Top,

panel1.ClientRectangle.Width,

panel1.ClientRectangle.Height);

}

catch (Exception ex)

{

m_objVideoWindow = Null;

}

m_objMediaEvent = m_objFilterGraph as IMediaEvent;

m_objMediaEventEx = m_objFilterGraph as IMediaEventEx;

m_objMediaEventEx.SetNotifyWindow((int) this.Handle, WM_GRAPHNOTIFY, 0);

m_objMediaPosition = m_objFilterGraph as IMediaPosition;

m_objMediaControl = m_objFilterGraph as IMediaControl;

通过CleanUp()我们删除对象,如果对象存在。在我们可以开始渲染一个文件时,我们必须建立FilterGraphManager的几个新对象用新的方法。RenderFile()方法建立了一个图象过滤器用来渲染指定文件。IBasicAudio类用来设定声音的大小和质量。IVideoWindow 类用来设定窗口风格,窗口位置。该函数是附加的,如果你播放声音文件,你如果调用该方法。可是播放声音文件不需要IVideoWindow类,所以将m_objVideoWindow设置成Null。IMediaEvent和IMediaEventEx类用来侦听消息,用来发送DirectShow信息到父窗口。通过IMediaPosition类,可以设置当前的位置。通过IMediaControl类来控制开始,停止视频和声音的播放。

想了解更多关于DirectShow的内容请读一下MSDN的文档。

怎样播放媒体文件?

用IMediaControl类的Run()方法来开始播放一个视频或声音文件。

m_objMediaControl.Run();

怎样暂停播放?

如果你想要暂停播放一个视频或声音文件,使用IMediaControl类的Pause()方法。

m_objMediaControl.Pause();

怎样停止播放?

用IMediaControl类的Stop()方法来停止播放一个视频或声音。

m_objMediaControl.Stop();

怎样得到文件的播放进度和持续时间?

当媒体文件被播放时,我们在状态栏指定当前的播放进度和文件长度。我们读取全部100MS内IMediaPosition类得到的当前进度并将大小显示在状态栏。为了得到文件长度我们读取了IMediaPosition类的Duration成员变量。

private void timer1_Tick(object sender, System.EventArgs e)

{

if (m_CurrentStatus == MediaStatus.Running)

{

UpdateStatusBar();

}

}

时间函数每隔100MS调用UpdateStatusBar()方法,用来显示当前位置和文件进度。Collapseprivate void UpdateStatusBar()

{

switch (m_CurrentStatus)

{

case MediaStatus.None : statusBarPanel1.Text = "Stopped"; break;

case MediaStatus.Paused : statusBarPanel1.Text = "Paused "; break;

case MediaStatus.Running: statusBarPanel1.Text = "Running"; break;

case MediaStatus.Stopped: statusBarPanel1.Text = "Stopped"; break;

}

if (m_objMediaPosition != Null)

{

int s = (int) m_objMediaPosition.Duration;

int h = s / 3600;

int m = (s - (h * 3600)) / 60;

s = s - (h * 3600 + m * 60);

statusBarPanel2.T ext = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);

s = (int) m_objMediaPosition.CurrentPosition;

h = s / 3600;

m = (s - (h * 3600)) / 60;

s = s - (h * 3600 + m * 60);

statusBarPanel3.T ext = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);

}

else

{

statusBarPanel2.T ext = "00:00:00";

statusBarPanel3.T ext = "00:00:00";

}

}

当文件播放结束时会怎样?

为了判定,文件是在结束状态,我们重写了WndProc函数,处理EC_COMPLETE消息,当文件结束播放时,将向窗口发送DirectShow消息。

Collapseprotected override void WndProc(ref Message m)

{

if (m.Msg == WM_GRAPHNOTIFY)

{

int lEventCode;

int lParam1, lParam2;

while (true)

{

try

{

m_objMediaEventEx.GetEvent(out lEventCode,

out lParam1,

out lParam2,

0);

m_objMediaEventEx.FreeEventParams(lEventCode, lParam1, lParam2);

if (lEventCode == EC_COMPLETE)

{

m_objMediaControl.Stop();

m_objMediaPosition.CurrentPosition = 0;

m_CurrentStatus = MediaStatus.Stopped;

UpdateStatusBar();

UpdateToolBar();

}

}

catch (Exception)

{

break;

}

}

}

base.WndProc(ref m);

}

关键字:一个用C#开发的DirectShow媒体播放器(作者:Daniel Strigl) 按"Browse..." 选择DirectShow COM DLL。

using QuartzTypeLib;

关于代码:

怎样建立DirectShow并选择媒体文件?

在选择了主菜单下的"File -> Open..."后,显示"Open File"对话框然后用户可以选择一个媒体文件。在C#中通过建立一个OpenFileDialog类对象并使用ShowDialog()方法来实现。OpenFileDialog openFileDialog = new OpenFileDialog();

openFileDialog.Filter = "Media Files|*.mpg;*.avi;*.wma;*.mov;" +

"*.wav;*.mp2;*.mp3|All Files|*.*";

if (DialogResult.OK == openFileDialog.ShowDialog())

{

.

.

.

在以上完成之后,我们开始建立了DirectShow并开始渲染媒体文件。

通过以下几步完成:

建立图象过滤管理(FGM)

建立图象过滤(通过FGM)

播放图象并返回事件

以下代码演示怎样建立图象过滤管理和图象过滤:

CollapseCleanUp();

m_objFilterGraph = new FilgraphManager();

m_objFilterGraph.RenderFile(openFileDialog.FileName);

m_objBasicAudio = m_objFilterGraph as IBasicAudio;

try

{

m_objVideoWindow = m_objFilterGraph as IVideoWindow;

m_objVideoWindow.Owner = (int) panel1.Handle;

m_objVideoWindow.windowstyle = WS_CHILD | WS_CLIPCHILDREN;

m_objVideoWindow.SetWindowPosition(panel1.ClientRectangle.Left,

panel1.ClientRectangle.Top,

panel1.ClientRectangle.Width,

panel1.ClientRectangle.Height);

}

catch (Exception ex)

{

m_objVideoWindow = Null;

}

m_objMediaEvent = m_objFilterGraph as IMediaEvent;

m_objMediaEventEx = m_objFilterGraph as IMediaEventEx;

m_objMediaEventEx.SetNotifyWindow((int) this.Handle, WM_GRAPHNOTIFY, 0);

m_objMediaPosition = m_objFilterGraph as IMediaPosition;

m_objMediaControl = m_objFilterGraph as IMediaControl;

通过CleanUp()我们删除对象,如果对象存在。在我们可以开始渲染一个文件时,我们必须建立FilterGraphManager的几个新对象用新的方法。RenderFile()方法建立了一个图象过滤器用来渲染指定文件。IBasicAudio类用来设定声音的大小和质量。IVideoWindow 类用来设定窗口风格,窗口位置。该函数是附加的,如果你播放声音文件,你如果调用该方法。可是播放声音文件不需要IVideoWindow类,所以将m_objVideoWindow设置成Null。IMediaEvent和IMediaEventEx类用来侦听消息,用来发送DirectShow信息到父窗口。通过IMediaPosition类,可以设置当前的位置。通过IMediaControl类来控制开始,停止视频和声音的播放。

想了解更多关于DirectShow的内容请读一下MSDN的文档。

怎样播放媒体文件?

用IMediaControl类的Run()方法来开始播放一个视频或声音文件。

m_objMediaControl.Run();

怎样暂停播放?

如果你想要暂停播放一个视频或声音文件,使用IMediaControl类的Pause()方法。

m_objMediaControl.Pause();

怎样停止播放?

用IMediaControl类的Stop()方法来停止播放一个视频或声音。

m_objMediaControl.Stop();

怎样得到文件的播放进度和持续时间?

当媒体文件被播放时,我们在状态栏指定当前的播放进度和文件长度。我们读取全部100MS内IMediaPosition类得到的当前进度并将大小显示在状态栏。为了得到文件长度我们读取了IMediaPosition类的Duration成员变量。

private void timer1_Tick(object sender, System.EventArgs e)

{

if (m_CurrentStatus == MediaStatus.Running)

{

UpdateStatusBar();

}

}

时间函数每隔100MS调用UpdateStatusBar()方法,用来显示当前位置和文件进度。Collapseprivate void UpdateStatusBar()

{

switch (m_CurrentStatus)

{

case MediaStatus.None : statusBarPanel1.Text = "Stopped"; break;

case MediaStatus.Paused : statusBarPanel1.Text = "Paused "; break;

case MediaStatus.Running: statusBarPanel1.Text = "Running"; break;

case MediaStatus.Stopped: statusBarPanel1.Text = "Stopped"; break;

}

if (m_objMediaPosition != Null)

{

int s = (int) m_objMediaPosition.Duration;

int h = s / 3600;

int m = (s - (h * 3600)) / 60;

s = s - (h * 3600 + m * 60);

statusBarPanel2.T ext = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);

s = (int) m_objMediaPosition.CurrentPosition;

h = s / 3600;

m = (s - (h * 3600)) / 60;

s = s - (h * 3600 + m * 60);

statusBarPanel3.T ext = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);

}

else

{

statusBarPanel2.T ext = "00:00:00";

statusBarPanel3.T ext = "00:00:00";

}

}

当文件播放结束时会怎样?

为了判定,文件是在结束状态,我们重写了WndProc函数,处理EC_COMPLETE消息,当文件结束播放时,将向窗口发送DirectShow消息。

Collapseprotected override void WndProc(ref Message m)

{

if (m.Msg == WM_GRAPHNOTIFY)

{

int lEventCode;

int lParam1, lParam2;

while (true)

{

try

{

m_objMediaEventEx.GetEvent(out lEventCode,

out lParam1,

out lParam2,

0);

m_objMediaEventEx.FreeEventParams(lEventCode, lParam1, lParam2);

if (lEventCode == EC_COMPLETE)

{

m_objMediaControl.Stop();

m_objMediaPosition.CurrentPosition = 0;

m_CurrentStatus = MediaStatus.Stopped;

UpdateStatusBar();

UpdateToolBar();

}

}

catch (Exception)

{

break;

}

}

}

base.WndProc(ref m);

}

详细出处参考:https://www.360docs.net/doc/178203645.html,/content-detail/123829_2.html

[引]C# WinForm DirectShow视频采集及图片抓取实例DxSnap

DirectShowSamples-2007-July\Samples\Capture\DxSnap Capture.cs

/************************************************************************ ****

While the underlying libraries are covered by LGPL, this sample is releas ed

as public domain. It is distributed in the hope that it will be usefu

l, but

WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILIT Y

or FITNESS FOR A PARTICULAR PURPOSE.

************************************************************************* ****/

using System;

using System.Drawing;

using System.Drawing.Imaging;

using System.Collections;

using System.Runtime.InteropServices;

using System.Threading;

using System.Diagnostics;

using System.Windows.Forms;

using DirectShowLib;

namespace SnapShot

{

///

Summary description for MainForm.

internal class Capture : ISampleGrabberCB, IDisposable

{

#region Member variables

///

graph builder interface.

private IFilterGraph2 m_FilterGraph = null;

// Used to snap picture on Still pin

private IAMVideoControl m_VidControl = null;

private IPin m_pinStill = null;

///

so we can wait for the async job to finish

private ManualResetEvent m_PictureReady = null;

private bool m_WantOne = false;

///

Dimensions of the image, calculated once in constru ctor for perf.

private int m_videoWidth;

private int m_videoHeight;

private int m_stride;

///

buffer for bitmap data. Always release by caller

private IntPtr m_ipBuffer = IntPtr.Zero;

#if DEBUG

// Allow you to "Connect to remote graph" from GraphEdit

DsROTEntry m_rot = null;

#endif

#endregion

#region APIs

[DllImport("Kernel32.dll", EntryPoint="RtlMoveMemory")] private static extern void CopyMemory(IntPtr Destination, IntPt

r Source, [MarshalAs(UnmanagedType.U4)] int Length);

#endregion

// Zero based device index and device params and output window

public Capture(int iDeviceNum, int iWidth, int iHeight, short iBP P, Control hControl)

{

DsDevice [] capDevices;

// Get the collection of video devices

capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInp utDevice);

if (iDeviceNum + 1 > capDevices.Length)

{

throw new Exception("No video capture devices found at th at index!");

}

try

{

// Set up the capture graph

SetupGraph( capDevices[iDeviceNum], iWidth, iHeight, iBP P, hControl);

// tell the callback to ignore new images

m_PictureReady = new ManualResetEvent(false);

}

catch

{

Dispose();

throw;

}

}

///

release everything.

public void Dispose()

{

#if DEBUG

if (m_rot != null)

{

m_rot.Dispose();

}

#endif

CloseInterfaces();

if (m_PictureReady != null)

{

m_PictureReady.Close();

}

}

// Destructor

~Capture()

{

Dispose();

}

///

/// Get the image from the Still pin. The returned image can tur ned into a bitmap with

/// Bitmap b = new Bitmap(cam.Width, cam.Height, cam.Stride, Pixe lFormat.Format24bppRgb, m_ip);

/// If the image is upside down, you can fix it with

/// b.RotateFlip(RotateFlipType.RotateNoneFlipY);

///

///Returned pointer to be freed by caller with Marshal. FreeCoTaskMem

public IntPtr Click()

{

int hr;

// get ready to wait for new image

m_PictureReady.Reset();

m_ipBuffer = Marshal.AllocCoTaskMem(Math.Abs(m_stride) * m_vi deoHeight);

try

{

m_WantOne = true;

// If we are using a still pin, ask for a picture

if (m_VidControl != null)

{

// Tell the camera to send an image

hr = m_VidControl.SetMode(m_pinStill, VideoControlFla gs.Trigger);

DsError.ThrowExceptionForHR( hr );

}

// Start waiting

if ( ! m_PictureReady.WaitOne(9000, false) )

{

throw new Exception("Timeout waiting to get picture ");

}

}

catch

{

Marshal.FreeCoTaskMem(m_ipBuffer);

m_ipBuffer = IntPtr.Zero;

throw;

}

// Got one

return m_ipBuffer;

}

public int Width

{

get

{

return m_videoWidth; }

}

public int Height

{

get

{

return m_videoHeight; }

}

public int Stride

{

get

{

return m_stride;

}

}

///

build the capture graph for grabber.

private void SetupGraph(DsDevice dev, int iWidth, int iHeight, sh ort iBPP, Control hControl)

{

int hr;

ISampleGrabber sampGrabber = null;

IBaseFilter capFilter = null;

IPin pCaptureOut = null;

IPin pSampleIn = null;

IPin pRenderIn = null;

// Get the graphbuilder object

m_FilterGraph = new FilterGraph() as IFilterGraph2;

try

{

#if DEBUG

m_rot = new DsROTEntry(m_FilterGraph);

#endif

// add the video input device

hr = m_FilterGraph.AddSourceFilterForMoniker(dev.Mon, nul l, https://www.360docs.net/doc/178203645.html,, out capFilter);

DsError.ThrowExceptionForHR( hr );

// Find the still pin

m_pinStill = DsFindPin.ByCategory(capFilter, PinCategory. Still, 0);

// Didn't find one. Is there a preview pin?

if (m_pinStill == null)

{

m_pinStill = DsFindPin.ByCategory(capFilter, PinCateg ory.Preview, 0);

}

// Still haven't found one. Need to put a splitter in s o we have

// one stream to capture the bitmap from, and one to disp lay. Ok, we

// don't *have* to do it that way, but we are going to an yway.

if (m_pinStill == null)

{

IPin pRaw = null;

IPin pSmart = null;

// There is no still pin

m_VidControl = null;

// Add a splitter

IBaseFilter iSmartTee = (IBaseFilter)new SmartTee();

try

{

hr = m_FilterGraph.AddFilter(iSmartTee, "SmartTee ");

DsError.ThrowExceptionForHR( hr );

// Find the find the capture pin from the video d evice and the

// input pin for the splitter, and connnect them pRaw = DsFindPin.ByCategory(capFilter, PinCategor y.Capture, 0);

pSmart = DsFindPin.ByDirection(iSmartTee, PinDire ction.Input, 0);

hr = m_FilterGraph.Connect(pRaw, pSmart);

DsError.ThrowExceptionForHR( hr );

// Now set the capture and still pins (from the s plitter)

m_pinStill = DsFindPin.ByName(iSmartTee, "Preview ");

DirectShow之接口实战篇

在正确安装好DirectX SDK后,我们必须设置DirectX SDK的头文件和库文件,使其在Visual Studio的搜索路径内。对于Visual Studio .NET 2003可如下进行设置:菜单→工具→选项→项目→VC++目录,在包含文件中加入D:\DXSDK\Include,在库文件中加入 D:\DXSDK\lib(我的SDK的安装路径是D:\DXSDK): 头文件 文件名称描述 Dshow.h所有的DirectShow应用都必须包含库文件 文件名称描述 Strmiids.lib此库文件中导出类标识(CLSID)和接口标识 (IID),所有的DirectShow应用都必须包含此 文件。 Quartz.lib此库文件中导出函数AMGetErrorText,如果 你的程序中调用了此函数,则必须包含此库 文件。 DirectShow之接口实战篇(一) 现今自己编程做一个多媒体播放工具是一件很令人开心愉悦的事情,但如果使用MediaPlay 控件开发则会受到很多限制,自己的很多好的创意想法都无法或者很难实现,如果利用微软的DirectX接口开发则可以充分的将作者的独特想法付诸于实现,何乐而不为呢!!不过关于DirectShow接口的开发说明文档实在是少之又少,仅有的一些不是英文的就是一些关于理论方面的,真正关于接口实战编程而且是用Delphi开发工具实现的更是凤毛麟角,使很多人都望而却步。在这里,我把我应用Directshow开发的心得以及我搜集到一些资料重新整理编辑出来公布,希望对所有由此兴趣的同仁有所帮助,就算达到了我的目的。废话少说,进入正文。 既然是接口实战篇,就先把一些常用的接口列出来,让大家有一些基本的认识,都是用来做什么的,什么时候我们会需要用到此接口。 IFilterGraph 过滤通道接口 IFilterGraph2 增强的IFilterGraph IGraphBuilder 最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager IMediaControl 用来控制流媒体,例如流的启动和停止暂停等,播放控制接口 IMediaEvent 播放事件接口,该接口在Filter Graph发生一些事件时用来创建事件的标志信息并传送给应用程序 IMediaEventEx 扩展播放事件接口 IMediaPosition 播放的位置和速度控制接口(控制播放位置只能为设置时间控制方式) IMediaSeeking 另一个播放的位置和播放速度控制接口,在位置选择方面功能较强.设置播放格式,多种控制播放方式.常用的有:(1)TIME_FORMAT_MEDIA_TIME单位100纳秒。(2)TIME_FORMAT_FRAME按帧播放 IBasicAudio 声音控制接口

利用DirectShow开发自己的filter

学习directshow已经有几天了,下面将自己的学习心得写下来,希望对其他的人有帮助。Filter实质是个COM组件,所以学习开发Filter之前你应该对com的知识有点了解。Com组件的实质是一个实现了纯虚指针接口的C++对象。关于com的东西,这里不多讲。 一给vc配置DirectShow的开发环境 无论开发Filter还是开发Dshow的应用程序都要配置一下开发环境的,其实就是包含一下dshow用到的头文件和动态库。选择Tools菜单下面的Options。在弹出的Option对话框配置如下 图1 添加头文件 选择动态库文件添加到工程中

图2 添加动态库 二创建工程以及Filter的入口函数 创建工程 一般情况下,创建Filter使用一个普通的Win32 DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter。 在vc里新建一个工程,选择win32动态库,如下图 图3 图4

这样生成了一个简单的DLL,只有一个Dllmain入口函数。 下面我要给这个filter添加入口函数了。 Filter是个基于DLL的com组件,所以一般的Filter都要实现下面几个入口函数 首先定义导出函数 要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。使用导出函数关键字_declspec(dllexport)创建MyDll.dll就是在 .h文件中定义定义函数如下: 为了用.def文件创建DLL,往该工程中加入一个文本文件,命名为MyDll.def,再在该文件中加入如下代码: LIBRARY MyFilter.ax EXPORTS DllMain PRIVATE DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE 其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到MyDll.dll和MyDll.lib文件。 然后要定义这些函数的实现了,其实这些工作dshow的基类里都已经替我们做好了,我们所要做的就拿来用就是了,最重要的三个函数的实现一般如下

35配置管理办法

配置管理办法 文件名称:配置管理管理办法 文件编号:ZHWH-CM-01-2017 文件类别:技术管理 编制部门:北京中航鼎成科技有限公司质量管理部 版本号: A 文件密级:秘密 受控标识:受控 拟制/日期:黄妙然 2017年09月27日 审核/日期:刘晔 2017年10月15日 会签: 批准/日期:杨成 2017年11月1日

修订页

目录 第1章目的和范围 (1) 第2章角色和职责 (1) 第3章定义和术语 (2) 第4章配置库管理及规划 (2) 第5章配置管理流程图及活动说明 (2) 5.1 研发配置管理流程图及活动说明 (2) 第6章度量数据收集 (6) 第7章相关文件和记录 (6)

北京中航鼎成科技有限公司配置管理管理办法 第1章目的和范围 为规范北京中航鼎成科技有限公司在项目生命周期过程中的配置管理活动,确保在项目的整个生命周期中建立和维护项目产品的完整性、正确性、可追溯性和一致性,保证项目过程中配置管理相关工作满足公司质量体系要求,特制定北京中航鼎成科技有限公司配置管理规范。 本文档适用于北京中航鼎成科技有限公司所有项目的配置管理活动。 第2章角色和职责

注1:“配置变更控制”参见《TDCS/CTC综合维护平台产品变更实施细则》,本文不再说明,配置项拟审批原则参见《北京中航鼎成科技有限公司配置项清单》。 第3章定义和术语 (1)基线:BaseLine,就是经过正式评审和认可的工作产品,它是以后进一步开发的基础。基线分为过程基线和交付基线。 (2)配置项:配置是指在项目生命周期各个阶段所产生的各种形式和各种版本的文档、程序及其数据的集合,该集合中的每一个元素称为该配置中的一个配置项。配置项分为基线配置项和非基线配置项。(3)基线配置项:一般组成产品元素的配置项均要定义成基线配置项,如产品需求、设计文件、源代码、测试文件等均要定义成基线配置项,基线发布后所有的变更都要严格按照《北京中航鼎成科技有限公司产品变更实施细则》执行。 (4)非基线配置项:一般非产品组成元素的配置项可以定义为非基线配置项,如项目计划、评审类等。 非本项目控制的工作产品,但为了共享和最新版本的获取,该类元素作为非基线配置项也纳入配置管理库,如外部文件、标准、参考文件、会议纪要、工作报告、过程记录等。 第4章配置库管理及规划 配置库管理及规划如下: 1)研发项目(含工程项目的定制开发):按照产品线进行规划管理; 2)工程项目:按项目管理、工程实施过程两大块进行规划管理; 第5章配置管理流程图及活动说明 5.1 研发配置管理流程图及活动说明 5.1.1研发配置管理流程图

DirectX+9.0b+sdk和OpenCV_1.0和VC6.0配置

OpenCV环境配置步骤 首先声明:我是在WindowsXP下,使用VC++6.0 + sp6编译器,其他的版本我没有试过。 安装DirectX 9.0b sdk和OpenCV_1.0,这是我的搭配,实践过肯定可以说没问题,以后OpenCV肯定会再更新,届时有什么注意的再说。安装最好选择默认的安装目录(另选目录的话环境变量和别人的不一样,工程拷贝给别人的话可能需要调整),directX sdk要带Sample一起安装,因为其中的一些文件在配置OpenCV的时候要用到。 1、安装directX sdk。 2、进入C:\DXSDK\Samples\C++\DirectShow\BaseClasses目录,把这个工程在Debug和Release下编译后,将生成的STRMBASE.lib和strmbasd.lib复制到C:\DXSDK\Lib下面。 1、安装OpenCV后系统变量一般会自动设置,不过还是检查一下,没有的话就要在操作系统环境变量path下添加 C:\Program files\OpenCV\bin。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe) 2、只要在cvaux\include文件夹下的cvaux.h文件,在文件中搜到foreground_regions所在的行,将 CvMemStorage* storage; /*storage for 揻oreground_regions?/ \ CvSeq* foreground_regions /*foreground object contours*/ 中的?改为*就可以了 3、到OpenCV安装目录\_make下找到opencv.dsw并打开 菜单Tools->Options->Directories 选择Library files,在下方填入路径: C:\Program Files\DXSDK\Lib 选择include files,在下方填入路径: C:\Program Files\DXSDK\Include C:\PROGRAM FILES\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES 选择source files,在下方填入路径: 然后在Debug和Release下全部编译,选择build-> batch build. 在OpenCV/Lib生成所有库文件。 1、配置VC的环境全局设置 菜单Tools->Options->Directories 选择Library files,在下方填入路径: C:\Program Files\OpenCV\lib 选择include files,在下方填入路径: C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\ml\include C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\include 选择source files,在下方填入路径: C:\Program Files\OpenCV\cv\src C:\Program Files\OpenCV\cxcore\src C:\Program Files\OpenCV\cvaux\src C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\src\windows 2、项目设置

实现DirectShow技术开发准备

C#实现DirectShow技术开发准备 时间:2009-10-21 23:45 点击:73次字体:[大中小] DirectShow组件在“C:WINDOWSsystem32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。在转换过程中需要使用FrameWork SDK自带的TlbImp命令工具,该命令工具在“D:Program FilesMicrosoft Visual Studio 8SDKv2.0BinTlbImp.exe”目录下(取决于Visual Studio 2005的安装路径)。该命令的使用方法为: TlbImp C:WINDOWSsystem32quartz.dll out:C:WINDOWSsystem32quartzDriectShow.dll 在DOS命令下执行转换成功。 转换完成后需在应用程序引用quartzDriectShow,引用quartzDriectShow.dll组件步骤如下: (1)在Visual Studio 2005开发环境中,选择菜单“项目”/“添加引用”命令,弹出“添加引用”对话框。 (2)选择“浏览”选项卡,通过浏览找到引用quartzDriectShow.dll所在的位置,并引用到程序中来。 (3)最后引入using quartzDriectShow,在程序中可以开发相关多媒体程序了。 开发人员还可以通过编写自己的过滤器扩展DirectShow多媒体支持。下面是DirectShow组件的接口。 l IFilterGraph:过滤通道接口。 l IFilterGraph2:增强的IfilterGraph。 l IGraphBuilder:最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager。 l IMediaControl:用来控制流媒体(如流的启动和停止暂停等)播放控制接口。 l IMediaEvent:播放事件接口,该接口在FilterGraph发生一些事件时用来创建事件的标志信息并传送给应用程序。 l IMediaEventEx:扩展播放事件窗口。 l IMediaPosition:播放的位置和速度控制接口(控制播放放置只能为设置时间控制方式)。 l IMediaSeeking:另一个播放的位置和播放速度控制接口,在位置选择方面功能较强,设置播放格式。常用的控制播放方式有:TIME_FORMAT_MEDIA_TIME单位100纳秒;TIME_FORMAT_FRAME按帧播放。 l IBasicAudio:声音控制接口。

三维重建模型内窥镜图像综合分析软件产品技术要求

三维重建模型/内窥镜图像综合分析软件产品技术要求 结构组成:产品为单机架构;版本号:V1.0; 本软件以光盘形式交付(光盘包括软件安装包、产品说明书); 软件主要由模型导入模块、患者信息查看模块、器官分类模块、姿态控制模块、摄录模块、操作教程模块组成。 适用范围:适用于符合DICOM标准的CT图像以.rx3d格式存储的三维模型数据和内窥镜影像的导入、显示、叠加查看的操作。 1.1 软件型号规格:RXFQJMR-I 1.2 发布版本 软件发布版本:V1.0 1.3 版本命名规则 软件的完整版本命名由四部分组成,完整版本型号:VX.Y.Z.B ,分类描述如下: 字母V为版本Version的缩写; * X:主版本号,也是发布版本号,表示重大增强类软件更新,初始值为1,当软件进行了重大增强类软件更新,该号码加1; * Y:子版本号,表示轻微增强类软件更新,初始值为0,当软件进行了轻微增强类软件更新,该号码加1; * Z:修正版本号,表示纠正类软件更新,初始值为0,当软件进行了纠正类软件更新,该号码加1; * B:构建号,表示软件编译生成一个工作版本,符合软件更新的定义,初始值为0,当软件进行了构建更新,该号码加1。 2.1 通用要求 2.1.1 处理对象 软件针对腹腔镜影像、软件定义的.rx3d格式的三维数据进行处理。 2.1.2 最大并发数 软件运行的网络环境为单机环境,支持读取影像数据的最大用户数为1。 2.1.3 数据接口 软件通过高清数字视频信号DVI、SDI、VGA接口,与医疗设备进行影像传输,支持模拟视频信号接口。

2.1.4特定软硬件 特定硬件:广播级视频采集卡,支持SDI、VGA、DVI接口,对于非DICOM标准的视频输出的医疗设备,选用支持DirectShow的视频采集卡。 2.1.5 临床功能 登录界面功能: 1)显示登录用户名,密码。 2)密码隐藏功能,点击输入框后面显示按钮可查看登陆密码。 3)点击登录或按键盘Enter键,均可登录。 操作界面功能: 1)文件导入模块:在软件菜单栏点击模型导入按钮,在软件右侧功能栏即显示患者三维模型信息的导入按钮列表。点击三维模型信息按钮可导入相应的三维模型。 2)患者信息录入模块:在软件菜单栏点击患者信息按钮,在软件右侧功能栏即显示三维模型中已存的患者信息(包括姓名、性别、入院编号、主治医师、病例诊断和手术类型),亦可在此对患者信息进行修改或重新录入。 3)三维模型器官分类模块:在软件菜单栏点击器官分类按钮,在软件右侧功能栏即显示器官分类。在此模块中,亦可通过点击代表各器官、组织的各色按钮来控制三维模型各器官、组织的显示或隐藏,以及拖动滑动条调整各器官、组织的透明度。 4)三维模型姿态调整模块:在软件菜单栏点击姿态调整按钮,在软件右侧功能栏即显示三维模型位置操作按钮,含上、下、左、右移动4个按键,远、近移动2个按键和三个可控制X/Y/Z轴的滑动按钮。在此模块可控制三维模型的姿态变换。 5)摄录模块:在软件的菜单栏点击摄录按钮,在软件右侧功能栏即显示录像和截屏按钮,点击录像按钮可录制手术的操作过程,点击截屏按钮可随时截屏,为后期的视频教学保存相关资料。 6)软件使用帮助模块:在软件的菜单栏点击软件使用帮助按钮,在右侧功能栏即显示鼠标和键盘操作的示意图,在主窗口显示操作视频,可观看学习软件快速上手视频。

it运维年终工作总结

it运维年终工作总结 作为整个企业的IT“管家”,首先应该对管理的资产情况了然于胸。比如说: 现在的IT规模是怎样的?网络链路总长是多少?网络设备和服务器的数量、类型各是什么?都是什么品牌的?还有每个服务器上运行的数据库、中间件的类型和数量等等,这些情况都应该一个不漏、有条理地梳理清楚。 搞清楚“有什么”的问题以后,还应该做个比较,目前的资产情况和历年相比有什么变化,是增加还是减少了,这些变动都体现在哪里?这些数据整理出来,一张清晰的“资产图”便被轻松地“绘制”出来了 二、业务构成及分析 一个企业里,最重要的应该就是业务系统的稳定运行和增效。所以IT运维管理员的总结里,必然不能缺少对业务系统保障情况的描述。 首先也应该勾勒出“业务”的大体形象:目前我们所有的业务系统有哪些?哪些是核心的业务,它们在解决何种问题,为用户提供了哪些服务?这些业务又运行在哪些服务器上,它们的运行状态如何…?这样我们先直观地把“业务系统”介绍给大家。 接下来我们可以深入地去剖析一下这些业务的运行状况,比如:我们的业务系统一年中平均每月主干链路的总流量达到了多少?将这些业务流量排名,前几位的是哪些?这些高流量的业务有多少人次在

访问?这些业务的平均无故障运行时间是多少?根据其设计,这些业务的可用性指标达到多少?是远未达到使用预设,差一些到满负荷,还是已经超负荷…等等。还有“变化”的视角是应该一直具备的,还需要与往年比,哪些业务是新增的,这些新增业务的使用情况如何,是用得较多还是较少? 三、事件处理情况 对一年中所做的事件处理情况进行汇总。你是否能说清楚IT部门这一年处理的事件数量有多少?这些事件分类有哪些?哪些是重大事件?这一年里产生过哪些重大的事件?这些重大事件对整个IT系统的影响是什么?是否针对此进行过全面的分析,并给到过改进的意见?采取了哪些措施保障了核心业务的SLA?这些数据也有助于对全年的运维工作进行了解。 四、未来工作开展建议 一份年终总结,除了要说清楚这一年发生的事儿,还应该能对下一年乃至未来几年的工作开展提供客观依据。并且作为一个合格的IT运维管理员,眼界应该更宽一些,除了着眼于本职工作,也应该不断地关注业界的新技术、新趋势,并去分析这些新技术对本企业的IT规划是否会产生影响,可能产生的影响又是什么?结合之前对业务使用情况的统计和分析,你就可以为决策者提供出一些更有意义的信息和建议:未来企业上马一些什么样的IT业务能为企业可持续发展带来先机,哪些IT系统需要改进以满足未来不断增长的需要等等。

基于DirectShow视频及图片捕获软件的开发

基于DirectShow视频及图片捕获软件的开发 我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。 笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。下面是软件的主界面。 预览视频后可以对视频格式和图像参数进行设置。开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。

下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。 另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。 从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。我们将逐步开放我们的源代码,以便更多的同行一起来探讨相机的图像采集技术。 下面是详细的软件开发过程。 一、安装DirectShow和visual studio 2005 首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布的dx90bsdk.exe,安装在D盘的DXSDK下。软件下载地址为 https://www.360docs.net/doc/178203645.html,/download/b/6/a/b6ab32f3-39e8-4096-9445-d38e6675de85/dx90bsdk.exe。 然后安装好visual studio 2005。安装完以后我们将进行开发环境的配置。 二、开发环境配置

软件项目管理年度工作总结范文

( 工作总结 ) 单位:_________________________ 姓名:_________________________ 日期:_________________________ 精品文档 / Word文档 / 文字可改 软件项目管理年度工作总结范 文 Annual work summary model of software project management

软件项目管理年度工作总结范文 软件项目管理已经到了学期的最后,我们seed小组的软件项目也已完工,这一个学期真的是获益匪浅! 礼平老师曾经说我既可以走技术路线也可以走管理路线,一切都看我自己。真的很是佩服老师的看人眼光,很犀利。我知道,现在的我不是没有能力去做好,只是自己没有去做,一直在殿外徘徊,不肯付出努力向前迈进。从大一到现在,我的专业技术一直都是我的短板,理由么,很简单,就是因为自己懒,不肯花时间去做。从以前不知道自己想做什么,到现在明确目标,可以说,软件项目管理课程给了我很多灵感,让我从自己纷乱的思绪中看清楚了自己最想要的东西。一直自己很喜欢管理,我会花费很多时间在这上面,从大一到现在一直都是,一直没有改变过。在技术上,我总是给自

己找借口,总是偷懒,但我现在明确了一点,没有技术,就没有管理!脱离技术的管理是不可能的,也是不现实的。在这个行业里,技术是一切的基本,想作工程师也好,想作管理者也好,技术都是起步的根基。而我这次所经历的项目更让我明确了这一点。在这个小项目里,虽然我们两个星期就开发完成了这个软件,并交付使用,但是问题还是很多的。在这么一个小项目里,由于需求、设计、代码、文档产生的问题,每一个看似容易,却都需要实实在在的经验在里面,都需要对业务的熟悉,有语言功底作根基。 在这个项目里,我负责软件配置管理工作,在文档的整理过程中,我仔细看了他们的需求分析,概要设计,数据库设计,模块设计等文档,也参与了风险分析文档的编写,承担了用户手册和项目成本估算的编写。在这个过程中,我明确了技术的实在意义,明确了技术对我的指导作用,同时也明确了自己的学习道路应该怎么走下去! 整个项目进行的过程中,我一直在努力从中学习,我旁听开发组的会议,为组长提供管理意见,为会议、文档制定标准,整个过

基于DirectShow视频及图片捕获软件的开发

我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。 笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。下面是软件的主界面。 预览视频后可以对视频格式和图像参数进行设置。开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。 下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。 另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。 从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。我们将逐步开放我们的源代码,以便更多的同行一起来探讨相机的图像采集技术。 下面是详细的软件开发过程。 一、安装DirectShow和visual studio 2005 首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布的,安装在D盘的DXSDK下。软件下载地址为。 然后安装好visual studio 2005。安装完以后我们将进行开发环境的配置。 二、开发环境配置

运维项目工作总结参考

运维项目工作总结参考-CAL-FENGHAI.-(YICAI)-Company One1

xxxx运维服务工作总结

目录

1概述 2011年对于XXXX来说是具有历史意义的一年,XXXX成功上线到接入第一个业务系统:集团采购门户系统,揭开了XXXXXXXX认证的一个新的篇章,XXXX 公司作为XXXX的运维服务方,在历史的一年即将过去,通过对XXXX运维工作进行年度总结,从中发现工作中的不足,在以后的工作中逐渐改善。 2运维项目背景 3运维目标 XXXX公司为XXXX系统提供运行维护服务包括,XXXX软件系统、系统相关的主机设备、操作系统、数据库和存储设备的运行维护服务,保证XXXX系统整体的正常运行,降低整体管理成本,提高XXXX系统的整体服务水平。同时根据日常维护的数据和记录,提供XXXX系统的整体建设规划和建议,更好的为XXXX发展提供有力的支持。 同时XXXX公司为XXXX系统提供业务协维服务,包括业务系统接入前期业务支撑、业务系统接入后期业务支撑,为业务系统提供专业的业务指引、开发指引,方便各业务系统快速接入XXXX系统。 XXXX系统的组成主要可分为两类:硬件设备和软件系统。硬件设备包括网络设备、安全设备、主机设备、存储设备等;软件设备可分为操作系统软件、典型应用软件(如:数据库软件、中间件软件等)、业务应用软件等。 XXXX公司通过运行维护服务的有效管理来提升XXXX系统的服务效率,结合用户现有的环境、组织结构、IT资源和管理流程的特点,从流程、人员和技术三方面来规划用户的网络信息系统的结构。将用户的运行目标、业务需求与IT服务的相协调一致。 XXXX公司提供的服务的目标是,对用户现有的XXXX系统基础资源进行监控和管理,及时掌握网络信息系统资源现状和配置信息,反映XXXX系统资源的可用性情况和健康状况,创建一个可知可控的IT环境,从而保证XXXX系统的各类业务应用系统的可靠、高效、持续、安全运行。 4运维人员配备 XXXX运维人员梯队结构 人的因素是决定运维服务好坏的最重要的因素,合理的人力配置能够提高运维的质量和效率,保障运维工作的顺利开展, XXXX公司通过人力资源的整合

软件项目-配置管理总结-模板

XXX项目 配置管理总结模板 版本:V1.0 XXXX年XX月

1配置管理工作总结 (1) 1.1配置项按计划入库情况 (1) 1.2配置项变更情况 (1) 1.3配置管理工作统计 (1) 2经验教训 (2) 3好的实践 (2) 4对配置管理改进的建议 (2) 5模板补充说明 (2) 5.1关于字体 (2) 5.2关于页眉页脚 (2) 5.3关于图、表 (3)

1 配置管理工作总结 [介绍项目中的配置管理情况,与配置管理计划对比,进行总结,包括进行了什么培训、进行了什么审计、发现问题的情况、问题处理的情况,配置管理的工作量,工具支持、指导情况] 1.1 配置项按计划入库情况 表1-1 1.2 配置项变更情况 表1-2 1.3 配置管理工作统计 [包括进行了什么审计、进行了什么变更等]

[介绍在项目的配置管理中遇到了一些什么问题,并介绍如何解决] 3 好的实践 1、产生较好执行效果的过程或活动;好的方式、方法和技巧,尽可能具体,便于在公 司或其它项目组推广;好的经验 2、列出配置管理推荐出来的项目优秀范例或方法的清单 4 对配置管理改进的建议 [列出对配置管理的改进意见和建议] 5 模板补充说明 5.1 关于字体 ●封面题名项目计划一号黑体 ●大标题 1 项目目标黑体二号 ●一级节标题 1.1质量目标黑体三号 ●二级节标题 1.1.1过程质量黑体四号 ●三级节及以下标题 1.1.1.1测试过程质量黑体小四号 ●正文测试过程质量要求宋体小四号 ●表及表题表1-1 黑体五号 ●英文和数字字体采取Arial 5.2 关于页眉页脚 ●封面:没有页眉页脚; ●版本及目录:页眉为文档名称;页角中的页码采取罗马数字,从Ⅰ开始; ●正文:页眉与版本及目录一致,为文档名称;页码编号采取阿拉伯数字,从1开始。

中文版MeGUI的x264编码配置详细解读

本帖最后由宁战网络于2012-7-30 14:58 编辑 中文版MeGUI的x264编码配置详细解读 有人向往和膜拜科班出身的,这个我同意,但若无视艹根的存在,那么我很生气,往往是民间高手如林,自己何必妄自菲薄。一早我也说过不敢在压制的方向前进,那是因为这是个苦力不讨好的工作,有空我还不如多看看美女…… 只要关注,网络上的东西随处可以学习到,就对这个x264编码配置来说,网络上的资源多如脚毛。我嫉妒恨的是科班出身的总会先天就有优势,民间人士门要蛋定,不要比,不要计较,自己玩自己的,不用理正统不正统。我们的优势在于,科班人士再厉害他也没有拍电影也没做导演也没潜了哪个女优,嘎嘎,扯远了。 本文主要讲解x264编码的设置问题,是对应本人推荐的中文版MeGUI所做的一次详细配置论述,请用英文版的英雄路过不要取笑,也应该不要盲目的路过。我还是传统的图文方式来一起研究,当然我说的不一定对,那是因为网络上也是这么教的,可能一直都错着我也用错的来说,在这次解释中,我会用一些自己理解的来说话,也许更能让民间人士理解。 普及一下别的知识,在各大影视论坛基本不允许发布以RMVB格式的影片,你只要用上x264的编码就意味着你和RMVB说88了。民间人士普遍认为RMVB体积小画面清晰,但科班的人士会用理论的知识告诉你,同样的片源和同样的码率下,x264的mkv绝对比rmvb画质更好,文件更小。这是为什么?你要问这是为什么?那是因为x264的编码机制发挥了无法想像的作用,你只要实践了就会明白这是真的,打住不说了反正就像磁带被光盘取代,windows98被xp顶上。 科班厉害之处是懂得比较多,早前的x264.exe是命令参数实现压制的,DOS级的工具很怕黑的就不要尝试了。GUI,是图形界面操作,适合民间高手使用。曾被科班出身的嘲笑过,说使用MeGU压制的都是水货,嘎嘎,我笑笑不能回答。科班告诉我就这GUI不是只有Me 的,这下你明白没?像ripbot、staxrip 等都是GUI……行了行了,民间人士也不用惭愧,至少MeGUI能自动更新编码,还有汉化版可以用,batch的是高手,不和他们一起玩! 安装MeGUI简体中文版(请回顾本人以前的大作,这里略去几百万字……)仿图挂,可下载 中文版MeGUI的x264编码配置详细解读或是到QQ空间查阅软件下载转到论坛页面以前的中文版本MeGUI太不专业了,直到你碰到我这个民间人士才集合了比较强大的中文版MeGUI,不要怕出错,出错不是你的错。等弄得差不多了可以还原成英文版更新你的编码,更上一层楼,英盲也用英文版,没人敢笑你。 正题: 在MeGUI用内置工具AVS创建一个简单脚本(这里暂时不介绍AVS的各种滤镜使用参数),要求在点击DirectShowsource(手工、专业)能弹出视频预览窗就可以保存AVS了。此时内建的AVS会自动加载到MeGUI 主界面,进入本文主题压制参数x264配置。

DirectShow获取一张图片

DirectShow:图片的抓取 zz 在播放媒体文件的过程中,有一个很有用的功能,就是在当前播放的位置抓取图,实现这种图片抓取功能的方法很多,我们这里只介绍常用的两种。 第1种方法最简单,它使用1BasicVideo::GetCurrentImage接口方法,代码如下。 boolSnapshotBitmap(IBasicVideo*pBa8icVideo,ê? constchar*OutFile) if (pBasicVldeo) { long bitmapSize=0;ê? //首先获得图像大小 if(SUCCEEDED(pEasicVidee->GetcurrentImage(&bitmapSize,ê?0))) { bool pass=false;ê? //分¤?配?图a?像?帧?内¨2存?? unsignedchar*buffer=newunsignedchar[bitmapSize]; //获?取¨?图a?像?帧?数oy据Y if(SUCCEEDED(pBasicVideo->GetCurrentImage(&bitmapSize,(long*)buffer)) ) { BITMAPFILEHEADER hdr;ê? LPBITMAPINFOHEADER ipbi;ê? ipbi=(LPBITMAPINFOHEADER)buffer;ê? int nColors=1<biBitCount;ê? if(nColors>256) //always is”?àBM”?à hdr.bfType =((WORD)(‘?M’?¥<<8)|’?¥B’?¥);ê? hdr.ê?bfSize =bitmapSize+sizeof(hdr);ê? hdr.ê?bfReservedl =0; hdr.ê?bfReserved2 =0;ê? hdr.ê?bfOffBits =(DWORD) (sizeof(BITMAPFILEHEADER)+lpbi->biSize+nColors*sizeof(RGBQUAD)); CFilebitmapFile(outFile,ê?CFile:êo:êomodeReadWrite | CFile:êo:êomodeCreate | CFile:êo:êotypeBinary);ê? //写??入¨?位?图a?文?件t头a?¤ bitmapFile.ê?Write{&hdr,ê?sizeof 【?BITMApFILEHEADER)); //写??入¨?图a?像?帧?数oy据Y(包?¨1括¤?§BITMAPINFOHEADER信?息?é) bitmapFile.ê?Write(buffer,ê?bitmapSize);ê? bitmapFile.ê?Close();ê?

C++摄像头视频捕捉程序

Visual C++编程实现摄像头视频捕捉 摘要:本文主要讲述用Directshow进行视频捕捉(捕捉静态图像)的编程思路,并提供针对摄像头编程的一个视频捕捉类CcaptureVideo和一个示例。 前言 DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。用DirectShow开发应用程序,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据, 并且进行相应的后期处理乃至存储到文件中。 DirectShow是基于COM的,为了编写DirectShow应用程序,需要了解COM客户程序编写的基础知识。DirectShow提供了大量的接口,但在编程中发现还是不够方便,如果能构 建一个视频捕捉类把常用的一些动作封装起来,那么就更方便了。 编程思路 为了更加容易建立视频捕捉应用程序,DirectShow提供了一个叫做Capture Graph Builder的对象,Capture Graph Builder提供IcaptureGraphBuilder2接口,该接口可以建立和控制Capture Graph。 建立视频捕捉程序,必须首先获取并初始化IcaptureGraphBuilder2接口,然后选择一个适当的视频捕捉设备。选择好设备后,为该设备创建Capture filter,然后调用AddFilter 把Capture filter添加到Filter Graph。 如果仅仅希望用摄像头来进行实时监控的话,只需要在上面的基础上调用ICaptureGraphBuilder2::RenderStream就可以了: ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder //省略初始化部分代码 IBaseFilter *pCap; // Video capture filter. //省略初始化和添加到Filter Graph部分代码 pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCap, NULL, NULL); DirectShow提供了一个捕捉静态图像的方法:使用Sample Grabber filter。依次按照以下三个步骤就可以了: 第一步, 定义一个类实现Sample Grabber的回调接口IsampleGrabberCB: class CSampleGrabberCB : public ISampleGrabberCB { //在后面提供的类中具体完成 }

it运维年度工作总结

it运维年度工作总结 总结一:it运维管理工作总结 至20XX年10月底,XX有限公司在xx公司的运维又届满一年的时间了。在这为期一年的运维工作当中,xxxx的业务飞速发展,设备数量不断增加,人员的技术水平和业务知识有了显著的提升。我们的队伍在技术水平和管理经验上也有了本质的提高。 一、细致缜密的完成计划中的日常运维工作:严把质量;服务至上;严格要求;技术领先。 1.承接运维工作初始信息技术部的各位领导就对我们的运维工作给予厚望,并提出了认真完善服务水平的方针。我们在服务过程中严格按照这一要求,以对保障xxxx的发展,对用户负责的精神,把“严把质量,服务至上”的原则贯穿于日常工作的各个环节之中。使本运维期过程中的客户满意度有了非常显著的提高,多次获得了用户的认可。 2.对于在工作中信息技术部提出的新要求、新方案,我们及时相应配合,本着“严格要求”的原则,对于提出的要求科学性的分析研究,及时提出完整周密的解决方案,并拟请用户试行或测试后实施。有力的保障了运维工作的及时有效性。 对于提高服务业务技术水平上,按照信息技术部的统一规划,按时完成一系列的既定培训计划。按照“技术领先”的

原则,通过技术上的培训提高了业务水平和解决故障的效率;通过制定有效的安全机制和培训,健全了xxxx信息外包人员安全机制;通过保密制度的培训使运维人员能够树立自觉维护xxxx的信息安全防范意识;通过客户服务意识的培训提高了客户的满意度。 二、吸收先进经验,保质保量的完成运维的各项任务:运维期内主机、服务器、网络和桌面均没有发生严重的生产安全事故,对于一些潜在的威胁也都在得到信息技术部门的批示下,审慎周密的完成了整改工作。运用先进的技术和经验提高劳动效率和运维工作质量: 1.运用先进的运维工具提高劳动效率。通过监控软件随时保持信息的及时性、可控性,一旦发生问题可以迅速定位和修复。 2.经过信息技术部指导,我们在运维工作中大量了采用WEB2.0技术。使我们在高效完成运维工作的情况下,为xxxx 节约了大量的费用投入。 3.在工作的过程中注意新技术和新方法的学习和收集,对于有利于运维工作的成功方案及时整理并提交信息技术部。经过5年来的维护工作存储了大量的知识库信息。 三、适应任务需要,及时解决运维过程中的遇到的问题: 1.在运维过程中遇到突发问题及时与信息技术部门相关人员进行沟通,对于紧急情况的处理按照《应急预案》进行

相关文档
最新文档