none
請問 Mpeg4 串流的 Buffer 如何顯示影像到 PictureBox 中? RRS feed

  • 問題

  •  

    各位先進大家好:

     

    最近在使用 VB.NET 連接到 Network camera 時,碰到一個問題

    因為對於 Mpeg4 壓縮與解壓縮原理不熟,想跟先進們請教

     

     

    該 Network camera 的壓縮格式為 Mpeg4,使用  Xvid 來壓縮

    每秒會傳回 25 張 Frame

     

    而 Network camera  SDK 中提供一事件 (OnNewFrame) 來接收 Frame

     

    Dim myArr() As Byte

     

    Private Sub AxVPortSDK_OnNewFrame(ByVal sender As Object, ByVal e As AxVPORTSDKLib._DVPortSDKEvents_OnNewFrameEvent) Handles AxVPortSDK.OnNewFrame
            label_framesize.Text = e.lFrameSize
            If (e.bSignal = False) Then
                label_framesize.Text = "Video Loss"
            End If
           
    myArr = e.pvFrameBuffer
    End Sub

     

    e.pvFrameBuffer 就是 Network camera 傳回來的 Frame,經由 Mpeg4 來壓縮

     

    我試著用

    Dim stream As MemoryStream = New MemoryStream(myArr, 0, myArr.Length)
    PictureBox1.Image = Image.FromStream(stream)

     

    來顯示該Frame,會產生錯誤

    上網搜尋 Mpeg4 相關資料後才發現

    原來 myArr 為 Mpeg4串流,當然無法直接顯示在 PictureBox 中

     

     

    請問我該如何將 myArr 的串流內容解碼後顯示出來呢?(聲音可以不要處理,只要圖片即可)

     

    謝謝各位先進


    2008年7月6日 下午 02:04

解答

所有回覆

  • HI,

     

    您可以參考以下這個得獎的範例:

    http://www.codeproject.com/KB/audio-video/cameraviewer.aspx

     

    tihs

     

    2008年7月7日 上午 02:41
  • tihs 先進您好:

     

    感謝您提供這個範例給我

    之前再搜尋相關資料的時候有看的這個範例

    不過沒發現他竟然是得獎的作品

     

    在這個範例中,所使用到的 Camera 的 StreamType 皆為 Jpeg 或 MJpeg

     

    PictureBox 可以經由

     

    Bitmap bmp = (Bitmap) Bitmap.FromStream(new MemoryStream( buffer, 0, total ) );

     

    來顯示影像

    但是當  StreamType 為 Mpeg4 時,因為串流經過壓縮,又含聲音檔

    因此接收到的 Buffer 不知道該透過怎樣的技術來解壓縮

    解壓縮之後再將 Buffer 的影像顯示出來

     

    因為沒這方面的經驗,所以想請教各位,謝謝

    再次謝謝 this 那麼快速的回應

    2008年7月7日 上午 03:11