vb中怎样实现picturebox对流媒体的播放,或者说怎样使用picturebox一帧一帧的显示出图像呢?需要什么函数和控件?如何测试显示速率?或者如果使用timer计时来播放,这时候的速率也就是由我来控制的了吧。谢谢……

解决方案 »

  1.   

    实现picturebox对流媒体的播放关注
      

  2.   

    picturebox不能播放流媒体(包括其他动态图像)
    你看到的应该是picturebox做为某播放控件的容器
      

  3.   

    那想要一帧一帧显示图像还需要用什么控件和函数?或者我采用timer计时,然后使得picture.picture属性定时变换为一帧一帧的图片,是否行得通?本来想用可以播放avi的控件,但是avi是pic的总和,不是单一的图像帧,如果使用这类控件怎么样控制才能实现它播放的是帧而不是一个avi文件呢。
      

  4.   

    如果你有c++基础,可买本<directshow开发指南>,然后花二个月时间仔细研究一下它。
    如果你真的会用它了,最后你就能用picture控件一帧一帧的显示图像了:)
    如果你没那个恒心和毅力那就还是使用别人写好了的控件或dll来播放吧:)
      

  5.   

    没那么多时间了,需要这几天马上弄出来,我只想知道有什么控件或者dll和函数可以实现帧式播放而不是avi文件播放。多谢大家了~
      

  6.   

    3.VB开发MPEG -- Audio/Video数据流的播放技术 
       3.1.VB中Multimedia MCI 控件,MediaPlayer控件播放MPEG数据流的缺点 
       VB中常用的多媒体控件是Multimedia MCI 控件,它管理媒体控制接口 (MCI) 设备上的多媒体文件的记录与回放。它被用来向诸如声卡、MIDI 序列发生器、CD-ROM 驱动器、视频 CD 播放器和视频磁带记录器及播放器等设备发出 MCI 命令,还支持 Windows (*.avi) 视频文件的回放。采用Multimedia MCI 控件播放采集的MPEG数据流,播放速度比实时监控显示要快,在测试时还发现MPEG文件长度缩短到500k-600k时,就无法看到播出的图像了。改用VB中的MediaPlayer控件上叙缺点仍然存在。分析原因是:因为MPEG文件长度太短了,播放设备刚打开就已经关闭了,这是编程无法控制的。而且,对于用户要求获取的某些有关压缩数据流的信息和希望实现的某些功能,比如图线尺寸、Copmression Rate、图形的缩放显示、界面的美观等,上叙控件所提供的为方便程序开发人员使用的高层接口已不适用,要想在此基础上实现对底层的一些操作,难度可想而知。在解决上叙实际性问题时,我们调用了动态链接库Quatrz.dll。 
       3.2.提供对MPEG流方便的底层操作和高层接口的动态链接库Quatrz.dll 
       在WindowsSystem下可找到一个动态链接库Quatrz.dll,这是Windows中带的用于控制运动图像的播放的一个类型库,只要在VB的"引用"菜单中将它添加进来即可使用。该库中定义了IBasicAudio,IBasicVideo和IBasicVideo2,IMediaEvent 、IMediaEventEx、IMediaPosition等类,可方便地在CommandButton控件的Click等事件中添加代码设置和读取Audio的相关值,设置或读取Video的输入输出源的相关参数,直接调用无参函数Run、Pause、Stop等控制播放事件进程,利用IMediaPosition类对具体播放细节进行操作。对于压缩的MPEG数据流的输出显示并不需要特别的控件,在VisualBasic中你可以选择一个窗体作为容器或窗体上的PictureBox控件作为容器。为了界面的美观和用户查取相关信息的方便,我们采用了PictureBox控件作为容器显示播放的MPEG数据流。 
       3.3.用PictureBox控件显示MPEG数据流 
       Visual Basic中PictureBox 控件可以显示来自位图、图标或者元文件,以及来自增强的元文件、JPEG 或 GIF 文件的图形。亦可在代码中操作图形属性和方法,以创建动画或进行仿真。在窗体上放置了一个PictureBox控件picTV,在调用了WindowsSystem下动态链接库Quatrz.dll的基础上,定义一个全局的Object对象pMC,令 pMC指向 FilgraphManager的一个新实例,打开压播放的MPEG文件;再定义一个局部对象 pVW 为 IVideoWindow的新实例,打开一个播放Video的窗口;令pVW = pMC,给对象引用pVW赋值,将picTV的属性值hWnd赋给pVW的Owner ,这样picTV就能显示接收的MPEG数据流了。具体操作如下: 
    Set pMC = New FilgraphManager pMC.RenderFile "C:BankMontiorExample.MPG" Set pVW = pMC pVW.WindowStyle = CLng(&H6000000) pVW.Left = 0 pVW.Top = 0 OldWidth = pVW.width OldHeight = pVW.Height picTV.width = pVW.width * 15 picTV.Height = pVW.Height * 15 pVW.Owner = picTV.hWnd    可以单独定义一个函数包括这些代码,也可将其放到CommandButton控件的Click事件中。    3.4.MPEG数据流的缩放显示    放大或缩小MPEG图像是各种多媒体播放软件中常用的图像显示处理手段。VisualBasic中对于静态图片进行缩放处理可以使用Image控件,将控件的Stretch属性设为True,则装入的图片会改变比例适应Image控件的范围,因此对图片的缩放处理变成对Image控件的Height、Width属性值的大小变化。由于控件的尺寸发生变化,显示的点距不能改变,造成显示点的像素点与图片不能完全一一对应,显示质量明显变差。只有Image控件才能对图片进行缩放,如果PictureBox控件不足以显示整幅图象,则裁剪图象以适应控件的大小。要想实现用PictureBox控件实现对输出MPEG图像的缩放,必须改变MPEG数据流的输出比例,在调节PictureBox控件的尺寸去适应输出的MPEG图像。实际上,在上面的第3小节里,为了显示输出MPEG图像已经这样做了。只不过用的是读取出的MPEG图像OldWidth、 OldHeight,下面给出一个以原来的1/2大小输出MPEG图像的例子。 
    pVW.width = OldWidth / 2 pVW.Height = OldHeight / 2 picTV.Left = 135 picTV.Top = 135 picTV.width = pVW.width * 15 picTV.Height = pVW.Height * 15 pVW.Owner = picTV.hWnd 
       在放大或缩小MPEG图像的尺寸时要注意保持Width、Height的比例一致,以免输出的图像变形。    3.5.鼠标拖动播放MPEG数据流 
       用鼠标拖动滚动条随意播放MPEG数据流是Windows中多媒体播放机播放VCD的常用技术。VB中的Slider 控件是包含滑块和可选择性刻度标记的窗口,可以通过拖动滑块,用鼠标单击滑块的任意一侧或者使用键盘移动滑块。在选择离散数值或某个范围内的一组连续数值时,Slider 控件十分有用。通过将滑块移动到刻度标记处,可以对MPEG数据流进行定位播放。在窗体上放置一个Slider 控件Slider 1,设置好光标移动的最大步长LargeChange=5,最小步长SmallChange=1,最大移动范围Max=50,实现程序如下: 
    Private Sub Slider1_Scroll() ’ Dim pMP As IMediaPosition Dim v As Double 
    If Not bOpen Then Exit Sub 
    bSeeking = True pMC.Pause 
    Set pMP = pMC 
    v = Slider1.Value - Slider1.Min v = v / Slider1.Max * pMP.Duration pMP.CurrentPosition = v Set pMP = Nothing 
    pMC.Run ’ End Sub 
       3.6.MPEG数据流采集时间的获取    VisualBasic里提供了一个函数FileDateTime可用来获取文件建立或是更新的日期与时间。定义一个局部对象 pMP 为IMediaPosition的新实例,令pMP = pMC,给对象引用pMP赋值;再定义两个Double型的变量curpos 、length,将pMP.CurrentPosition赋给curpos,取得MPEG数据流的当前相对位置时间,将pMP.Duration 赋给length,取得MPEG数据流的时间长度值;就能获取MPEG数据流相对的采集时间。根据MPEG采集文件建立的特性将两个日期时间作加法或减法则可以得到MPEG数据流的采集时间。 
       在整个MPEG的播放过程中,都要求实时显示MPEG数据流的采集时间,可定义一个获取采集时间的函数,采用Timer控件的Timer事件来驱动。通过引发 Timer 事件,Timer 控件可以有规律地隔一段时间执行一次函数获取到MPEG数据流的采集时间。 
       4.结束语 
       将成熟的图像压缩技术用于电视监视监控领域具有十分重要的意义。例如:在银行的监视监控系统中,由于客户(银行)身份的特殊性,在对冒领他人存款、银行失窃或被抢劫等扰乱银行正常工作秩序的事件的调查及其处理中,采集的压缩数据流是很重要的办案线索与证据。在该系统中不仅要求监视画面清晰,采集的数据冗余度低,MPEG数据流的播放技术也是很重要的。本文介绍了在Windows环境下,利用VisualBasic自身条件和原有控件开发MPEG卡采集的Audio/Video数据的播放技术。充分利用了VB的优越条件,灵活地与VB中各种现有控件结合,开发出来的MPEG媒体播放器功能完善,回放的MPEG画面能清晰地重现数据采集时场景、做到了"闻其声,见其人"、并能准确确定事件发生的时间时刻。对只记录了单帧的Audio/Video数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。