3G應用-windows mobile和symbian平台下rtsp流媒體播放

來源:互聯網
上載者:User
經過一段時間的努力手機3G應用流媒體播放器項目終於接近尾聲了。回想整個過程曆經坎坷阿!一共開發了兩個平台的應用,首先是windows mobile平台,相對symbian來說資源多一些,所以先拿它下手阿。
      說一下實現思路,剛開始考慮使用directshow,經過驗證沒達到預期目的(水平差阿,不懂directshow),接著研究tcpmp,尋思開發一個rtsp流外掛程式,再加上mpeg4的外掛程式不就行了嗎!一段時間之後發現tcpmp太牛了,沒看懂!(沒注釋、沒文檔),在快要跳樓的時候決定改為比較最原始的實現方式,
步驟如下:
1、讀取網路資料。
2、交給解碼器解碼。
3、轉換格式。
4、顯示繪製。
       首先mobile平台有很多wince和開源的東西可以拿過來用,例子有很多不過大多都是播放本地檔案。在這裡有兩個例子初學者可以看看。
       賽安軟體工作室提供的一個mpeg4解碼例子很不錯可以研究一下。它用自己的解碼器,可以播放15分鐘,可以為自己所用的是他的寫屏和yuvtorgb等。
       另外一個就是使用ffmpeg和sdl的例子,可以參考一下他使用ffmpeg的方法。ffmpeg在mobile平台下的代碼我這有,網上也有!具體下載位置不說了,在google裡搜尋ffmpeg4mobile有很多個下載點。
有了上面兩個例子開始搞自己的東西吧。首先是rtsp讀取網路流,這個東東網上也有,可以直接拿過用,我用的是開源的live55,不過需要移植一下。效率還可以!有了網路資料就要解碼了,解碼模組可以使用ffmpeg,但是效率不高,就考慮使用xvid,xvid這個解碼器效率不錯,並且也是開源的。有了網路資料和解碼器其餘的都是小問題了,解碼器輸出的yuv420,需要把它轉換為rgb。這步轉換網上很多,沒有搜不到,只有想不到啊!最後參考第一個例子的繪製部分就可以搞定!
附圖:

 

      再一個symbian平台,此平台也有例子!網路大大地好,都有例子參考阿!
      首先還是是賽安軟體工作室提供的一個mpeg4解碼例子symbian平台,不過不能debug,只能真機跑,遺憾中。不過繪製部分可參考!
      另一個例子就是MobiFLV,主要播放flv檔案,採用ffmpeg部分解碼代碼。此例子可以為我所用的是yuv2bgr的轉換。
      symbian平台有一個openc外掛程式,安裝之後用c寫的程式很容易移植過來,這個東西不錯哦!
安裝openc外掛程式之後同mobile一樣,首先是rtsp讀取網路流,我用的是簡單rtsp流,不過需要移植一下。效率還可以!有了網路資料就要解碼了,解碼模組可以使用ffmpeg,但是效率不高,就考慮使用xvid,xvid這個解碼器效率不錯,
並且也是開源的。symbian顯示時可以參考MobiFLV,解碼器輸出的yuv420,需要把它轉換為BGR。
附圖:

 


 

以上代碼雖說網上都有,但是也有我的汗水啊!Email sizhiguo512·163.com交流
幾個注意點:
1、mobile平台的全屏方式
        if(g_fFullScreen)
        {
            // To get info full screen mode, first hide all of the shell parts.
            dwState = (SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);
            SHFullScreen(GetSafeHwnd(), dwState);
#ifdef POCKETPC2003_UI_MODEL
            if(hmenu != NULL)
            {
                ::ShowWindow(hmenu, SW_HIDE);
            }
#endif
            // Next resize the main window to be the size of the screen.
            SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
            MoveWindow(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, TRUE);
        }
        else
        {
            RECT rcMenuBar = {0};

            // To get into normal mode, first show all of the shell parts.
            dwState = (SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON);
            SHFullScreen(GetSafeHwnd(), dwState);
#ifdef POCKETPC2003_UI_MODEL
            if(hmenu != NULL)
            {
                ::ShowWindow(hmenu, SW_SHOW);
            }
#endif
            // Then resize the main window to be the size of the work area.
            SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, FALSE);
#ifdef POCKETPC2003_UI_MODEL
            //GetWindowRect(hwnd, &rcMenuBar);
#endif
            MoveWindow(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top-26, TRUE);
        }
2、symbian平台的mmp檔案的include部分要添加 /epoc32/include/stdapis
3、symbian平台的mmp檔案添加CAPABILITY NetworkServices
4、symbian平台自簽名:
/Symbian/9.2/S60_3rd_FP1/Epoc32/tools>makekeys -cert -password 密碼 -len 2048 -dname "CN=Test User  OU=Development OR=Company  CO=FI EM=test@company.com" mykey.key mycert.cer
/Symbian/9.2/S60_3rd_FP1/Epoc32/tools>signsis name.sis name.sisx mycert.cer mykey.key 密碼

原文:http://sizhiguo512.blog.163.com/blog/static/61107489200941210827912/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.