Symbian 視頻錄製總結

來源:互聯網
上載者:User

 1 嘗試了下CCamera ,開啟之後,調用PrepareVideoCaptureL,然後StartVideoCapture。

得到的資料時yuv格式的

/** 4:2:0 format, 8 bits per sample, Y00Y01Y10Y11UV. */
  EFormatYUV420Interleaved = 0x0400,
  /** 4:2:0 format, 8 bits per sample, Y00Y01Y02Y03...U0...V0... */
  EFormatYUV420Planar   = 0x0800,
  /** 4:2:2 format, 8 bits per sample, UY0VY1. */
  EFormatYUV422    = 0x1000,
  /** 4:2:2 format, 8 bits per sample, Y1VY0U. */
  EFormatYUV422Reversed  = 0x2000,
  /** 4:4:4 format, 8 bits per sample, Y00U00V00 Y01U01V01... */
  EFormatYUV444    = 0x4000,
  /** 4:2:0 format, 8 bits per sample, Y00Y01Y02Y03...U0V0... */
  EFormatYUV420SemiPlanar  = 0x8000,

用YUV Player 是可以播放的,但是是沒有音訊。檔案也特別的大。

但是可以採集映像。

 

參考

RGB與YUV的轉換

從S60第三版FP2開始,MDF DevVideoRecord API作為SDK API Plug-in的一部分出現了。DevVideoRecord允許對視頻解碼和預先處理進行直接和底層的訪問。

傳輸到解碼器的必須是特殊的顏色格式,YUV422或更常見的YUV420(planar),YUV420每個像素有8位luminance (Y),和減少數量的chrominance(U,V)採樣,每個都覆蓋一個2x2像素地區。在plane模式下,Y,U和V值在記憶體中被分組為[Y0Y1Y2Y3Y4Y5Y6Y7....U0U1....V0V1],這樣增強了圖片的壓縮率.

 

下列代碼示範了如何將一幀原始RGB(8 bits/channel)轉化為YUV420格式。

// Definitions that help access each colour component in source bitmap
#define sR ((TInt32)(s[2]))
#define sG ((TInt32)(s[1]))
#define sB ((TInt32)(s[0]))
 
#define KImageWidth 176 // QCIF resolution
#define KImageHeigth 144
 
const TInt KImageNumPixels = KImageWidth * KImageHeigth;
// Lock source bitmap (CFbsBitmap)
iSourceBitmap->LockHeap(EFalse);
TUint8* s = (TUint8*)iSourceBitmap->DataAddress();
 
TInt i = 0;
TInt ui = KImageNumPixels;
TInt vi = KImageNumPixels + KImageNumPixels/4;
 
// iYuv is an array of TUint8 values, length (KImageNumPixels*3/2)
 
for(TInt j=0; j < KImageHeigth; j++)
for(TInt k=0; k < KImageWidth; k++)
{
// Y value is generated for each pixel
iYuv[i] = (TUint8)( ( 66*sR + 129*sG + 25*sB + 128) >> 8 ) + 16;
 
// U, V values are generated for every other pixel on every other scanline
if(0 == j%2 && 0 == k%2)
{
iYuv[ui++] = (TUint8)( (-38*sR - 74*sG + 112*sB + 128) >> 8 ) + 128;
iYuv[vi++] = (TUint8)( (112*sR - 94*sG - 18*sB + 128) >> 8 ) + 128;
}
i++;
s+=iBytesPerPixel; // Number of bytes representing one pixel in source
// bitmap e.g. if bitmap display mode == EColor16M
// (24bits/pixel), then iBytesPerPixel == 3
}
 
iSourceBitmap->UnlockHeap(EFalse);
// iYuv now contains the source frame converted to YUV420p format

注意:最新S60裝置有多個DevVideoRecord解碼用來區分H263和MPEG-4(VSP)編碼能力,是硬體加速還是基於軟體的編碼。一些編碼也支援直接從相機捕捉。編碼器及能力以及支援的輸入格式可以通過編程列出,並選擇一個適當的編碼器。

http://local.wasp.uwa.edu.au/~pbourke/dataformats/yuv/

 

 

2 後來用CVideoRecorderUtility。在諾基亞有例子。

但是還有一個問題:OpenFileL(), OpenFileL(), OpenUrlL(), 這三個函數只有OpenFileL()能用,也就是錄製的視頻資料只能儲存在檔案中。而想即時傳送還有待解決。

 

 

1.  S60用多媒體架構(MMF)實現視頻和音訊回放和錄製,其擁有一個外掛程式架構,可使用多種類型的用於媒體回放和錄製的外掛程式,比如RealPlayer引擎是針對MMF控制器的外掛程式,可使用視訊和音頻回放及流。2.  s60內建播放器採用Realplayer引擎。 不支援HTTP流媒體,因為在顯示之前必須把所有的視頻資料一次性讀入緩衝。3.  S60的常用格式是 MP4(編解碼標準為H.263和MPEG4)、3GP(H.263和MPEG4) 
4. 
S60平台支援C++進行多媒體開發,下表總結了如何用C++實現多媒體應用
用例 Symbian C++
使用S60媒體播放器和RealPlayer引擎播放本地檔案和RTSP流。 使用AppArc API(RApaLsSession)啟動S60媒體播放器應用。
使用定製的使用者介面和RealPlayer引擎播放本地檔案和RTSP流。 建立自己的使用者介面並使用CVideoPlayerUtility API播放和控制檔案或URL。
使用自己的播放器播放本地檔案。 建立自己的播放器。使用CMdaAudioOutputStream進行音頻渲染(1),使用CDirectScreenAccess API 進行視頻渲染。
使用自己的播放器實施流視頻內容。 使用network APIs( RSocketServ、RConnection、RSocket) 串連到網路(2)。 然後使用CMdaAudioOutputStream進行音頻渲染,使用CDirectScreenAccess API 進行視頻渲染。

 

5.  從上表得出結論,CVideoPlayerUtility用來開發視訊剪輯的播放和錄製。如果要開發一個讀取本地檔案或RTSP流而且格式為MP4、3GP或Rmvb的播放器,使用CVideoPlayerUtility就夠了。 但如果需要讀取網路資料流,就必須用network APIs串連到網路擷取資料,接著用CDirectScreenAccess API繪製螢幕,當中主要步驟有RTP傳輸,mpeg4/h264解碼,yuv2rgb轉換。如果不用symbian的API,流媒體傳輸可移植live555,視音頻解碼可用ffmpeg。

本文出自
51CTO.COM技術部落格

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.