1. 程式人生 > >YUV資料流編碼成H264

YUV資料流編碼成H264

自己使用ffmpeg進行編碼,在網上搜索到了雷霄驊大神,他的部落格內幾乎全是關於ffmpeg的,內容很全面,不過ffmpeg更新很快,他部落格上的有些程式碼,不太適合了。

但是,他提供了更新後的程式碼,自己使用的是如下的程式碼例子,地址在最後面。

檔案中有兩個例子,我都實驗過了全部是可以使用的,不過是在window下。自己需要在linux下進行編碼,使用ffmpeg庫,因為ffmpeg沒有自己x264編碼庫,所以還得先下載安裝x264庫,然後配置ffmpeg的時候,新增上--enable-x264,才可以進行使用ffmpeg。自己使用的是第二個例子,因為第二個例子便於自己進行修改。

修改的地方主要是把檔案輸入改為流輸入,關鍵的問題是把記憶體複製到相對應的yuv記憶體中。

    if (fread(pFrame->data[0],1,y_size,fp_in)<= 0||        // Y
            fread(pFrame->data[1],1,y_size/4,fp_in)<= 0||    // U
            fread(pFrame->data[2],1,y_size/4,fp_in)<= 0)    // V

修改為:

memcpy(m_pFrame->data[0], m_pBuf, m_ySize);
memcpy(m_pFrame->data[1], m_pBuf + m_ySize, m_ySize/4);
memcpy(m_pFrame->data[2], m_pBuf + m_ySize*5/4, m_ySize/4);

而且YUV資料流是通過回撥函式進行獲取的,正好每次獲取一幀。

修改後就可以使用了,可以正常編碼了。