可记忆绿播放器研究

时间:2022-08-07 10:36:19

可记忆绿播放器研究

摘 要:随着网络的盛行,一些不健康的信息也随之而来。特别是对于不健康的视频正在充斥的很大一部分青少年的心灵。而且在如今市面上流行的播放器,没有甄别的功能。对于一些认为不应该再次播放的视频,我们应该能够主动的屏蔽掉,这样当我们再次“心动”之时,此类文件已经处于禁止范围之内。鉴于如今影音文件的格式,我们设计了这款有“记忆”功能的播放器,成功实现对影片的“过滤”。

关键词:视频播放器;可记忆;窗体设计

中图分类号:TP

文献标识码:A

文章编号:1672-3198(2010)19-0323-02

1 设计分析

基于vb.省略.其次在播放器的设计上我们应用directionshowlib-2005,编写了一个相对功能简单的小控件,当然我们的目的不是播放视频。对于过滤的功能,我们用到的是二进制文件,在每播放一个影音文件的初始,我们要检测此影片的信息是否和禁止播放的信息相吻合,如果吻合则拒绝播放,退出程序,否则正常播放。

2 视频控件建立

2.1 关于directshow2005

Directshowlib-2005是国外一些人用C#编写而成,它把许多功能结构和接口重新定义然后封装,指定好各GUID。这个dll文件是进行关于视频采集方面快速开发的组件,编写控件当中只要简单的继承一些需要实现的事件,改变成自己想要的结果即可以,其它的内容不必改变,编译,生成控件即可。

2.省略环境下制作控件首先要建立一个windows窗体控件库应用程序,在主窗体中添加一个picturebox.然后就是重写要实现 的功能代码。这里我们省略了其它属性和动作的实现,只讲如何获 取文件流而能够播放的代码实现。

(1)获取过滤表图像 fg=New FilterGraph’fg 为 IGraphBuilder

(2)通过过滤表图像,获得各个事件的接口(Interferce)

MemMControl = DirectCast(fg, IMediaControl)

MemMSeeking = DirectCast(fg, IMediaSeeking)

MemMVeido = DirectCast(fg, IBasicVideo2)

MemMPosition = DirectCast(fg, IMediaPosition)

MemMVideoWindow = DirectCast(fg, IVideoWindow)

MemMEventEx = DirectCast(fg, IMediaEvent)

(3)获取Error事件,抛出错误类型(省略Enum)

hr = fg.RenderFile(NewMediaName, Nothing)

DsError.ThrowExceptionForHR(hrr)(hr 为 Integer)

在以下各每个加载事件的后也要抛出错误,下面就省略了。

(4)加载各个事件

MemMVideoWindow.put_Owner(Me.Handle)

MemMVideoWindow.put_MessageDrain(Me.Handle)

MemMVideoWindow.put_Visible(OABool.True)

MemMVedioWindow.put_WindowStytle(WindowStyle.Child)

MemMVedioWindow.SetWindowPosition(Me.ClientRectangle.Left,Me.ClientRectangle.Top,Me.ClientRectangle.Width,Me.ClientRectangle.Height)

(5)进入准备播放阶段,通知相应的准备事件

3 过滤的操作

3.1 读播放影片信息

首先定义二进制文件读取流

Dim filein As New FileStream(strVName, FileMode.Open)

Dim mybin As New BinaryReader(filein)

然后定义全局变量nowFile()字节数组,用于存放信息。接着读取文件长度length,以便设定读取位置。定义变量percent来标识开始读取的位置,初始值0.1,每读取一次percent加0.1,通过filein.seek实现定位,向下一个位置继续读取连续的字节信息。实现代码如下:

For percent = 0.1 To 0.6 Step 0.1

filein.Seek(position * percent, SeekOrigin.Current)

mybin.BaseStream.Read(nowFile, st + 1, 50)

st = st + 5

Next

3.2 读取Data文件的内容

根据存放时字节信息的长度,决定每次读取时读取的字节数量。首先打开Data文件,建立读取二进制流

(Dim fileout As New FileStream(“****”, FileMode.Open)

Dim mybin As New BinaryReader(fileout)),

根据下一个字节是否返回-1(mybin.PeekChar -1)判断是否到达文件尾部。每读取一个文件信息,进行比对,只要有一出不同则继续读取下一个文件信息

(If dataFile(i) nowFile(i) Then

Exit For

End If)。

如果全不相同则允许播放,否则禁止播放。注意在每读取完一个文件信息之后需要将指针向后移动一个,这和文件存取时相一致。

3.3 写入新的文件信息

在进行写入之前也要检测此信息是否已经存在于文件当中,如果存在则拒绝操作,否则只要根据此前读取的源文件信息nowFile()中的信息,写入文件即可(mybin.Write(nowFile))。

4 流程分析

4.1 播放影片

4.2 禁止播放

图1

5 窗体设计

图2

(1)中 建立Windows窗体应用程序,首先引入IO(openDialog)和directshowlib-2005(MemoryVedio)。

(2)引入工具MemoryVedio,并添加,依次添加需要的控件,并把必要的属性规定好,布局排列匀称。

(3)对各个控件添加相应的代码,并流程控制各个控件之间的联系。

(4)把上面对文件的操作加入代码中(readNowFile(),readDataFile(),writeFile,CheckFile()),并在文件目录中添加Data文件。

6 结语

鉴于如今各种格式的影片并没有格式化,和一些“流”信息的检测并不是很成熟,不健康的信息检测很困难。加之人的观念不同,是不能依据某种定义来区分好与不好的。所以在这里人为的实现添加,一方面起到自我保护,另一方面对好与不好依照主人的意见而定。当然我们想额外提出一点就是希望以后影片的发展可以格式化――即各种影片格式都有自己的编码区、各种级别的影片也都有自己的编码验证区,这样就有利于侦测,而不必像查杀病毒一样来检测。

参考文献

[1]陆其明.DirectShow开发指南[M].北京:清华大学出版社,2003.

[2]王进强.Visual 基础教程[M].北京:清华大学出版社,2004.

上一篇:电子商务与物流业关系解析 下一篇:构建市级独立统计法制机构的思考