青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

x264編碼得到的文件,在文件頭部的一些東西,有了新發現

轉載自:http://wmnmtm.blog.163.com/blog/static/38245714201192211245389/

下載的一個源碼里,實現了把264文件通過RTP發送,但是如果發送實時編碼的怎么辦,序列參數集和圖像參數集得自己發送,因為264文件本身在文件開頭已經存儲了這些了。

x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
(圖一)這是一個正確編碼得到的xxx.264文件,用UltraEDit打開的文件開始部分
 

在x264.dsw工程中,找了一下,找到點相關的東西。
另外,x264.exe在編碼文件時,只有一個地方進行文件的寫入,就是
int write_nalu_bsf( hnd_t handle, uint8_t *p_nalu, int i_size )
{
   if (fwrite(p_nalu, i_size, 1, (FILE *)handle) > 0)
{
         return i_size;
}
    return -1;
}
如果把函數里的代碼注釋掉,會發現,雖然在不停的編碼,但最終文件大小始終為0,從這一點可以證明只有此處進行文件的寫入操作。

那么,序列參數集是哪里來的呢,又找到一部分東西,在encoder.c文件的函數:
int     x264_encoder_encode( x264_t *h,/* 指定編碼器 */
                             x264_nal_t **pp_nal, /* x264_nal_t * */
 int *pi_nal, /* int */
                             x264_picture_t *pic_in,
                             x264_picture_t *pic_out )
中,有如下代碼:

    /* Write SPS and PPS 寫序列參數集、圖像參數集以及SEI版本信息,并不是寫入文件,而是寫入輸出緩沖區 最后通過p_write_nalu中的fwrite寫入到文件*/
    if( i_nal_type == NAL_SLICE_IDR && h->param.b_repeat_headers )
    {
printf("encoder.c : Write SPS and PPS");
system("pause");//暫停,任意鍵繼續

        if( h->fenc->i_frame == 0 )
        {
            /* identify ourself */
            x264_nal_start( h, NAL_SEI, NAL_PRIORITY_DISPOSABLE );
            x264_sei_version_write( h, &h->out.bs );
            x264_nal_end( h );
        }

        /* generate sequence parameters */
        x264_nal_start( h, NAL_SPS, NAL_PRIORITY_HIGHEST );
        x264_sps_write( &h->out.bs, h->sps );
        x264_nal_end( h );

        /* generate picture parameters */
        x264_nal_start( h, NAL_PPS, NAL_PRIORITY_HIGHEST );
        x264_pps_write( &h->out.bs, h->pps );
        x264_nal_end( h );
    }

    /* Write frame 寫入幀,并不是寫入文件,而是寫入輸出緩沖區*/
    i_frame_size = x264_slices_write( h );

在圖一中,看到有一個網址http://www.videolan.org,在源碼中搜索這個網址,找到唯一的一處,也就是如下的函數:
void x264_sei_version_write( x264_t *h, bs_t *s )
{
    int i;
    // random ID number generated according to ISO-11578
    const uint8_t uuid[16] = {
        0xdc, 0x45, 0xe9, 0xbd, 0xe6, 0xd9, 0x48, 0xb7,
        0x96, 0x2c, 0xd8, 0x20, 0xd9, 0x23, 0xee, 0xef
    };
    char version[1200];
    int length;
    char *opts = x264_param2string( &h->param, 0 );

    sprintf( version, "x264 - core %d%s - H.264/MPEG-4 AVC codec - "
             "Copyleft 2005 - http://www.videolan.org/x264.html - options: %s",
             X264_BUILD, X264_VERSION, opts );
    x264_free( opts );
    length = strlen(version)+1+16;

    bs_write( s, 8, 0x5 ); // payload_type = user_data_unregistered
    // payload_size
    for( i = 0; i <= length-255; i += 255 )
        bs_write( s, 8, 255 );
    bs_write( s, 8, length-i );

    for( i = 0; i < 16; i++ )
        bs_write( s, 8, uuid[i] );
    for( i = 0; i < length-16; i++ )
        bs_write( s, 8, version[i] );

    bs_rbsp_trailing( s );
}

x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 (圖二)注釋掉x264_sps_write( &h->out.bs, h->sps );的情況


x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
(圖三)注釋掉x264_pps_write( &h->out.bs, h->pps );的情況


x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲

(圖四)x264_sei_version_write( h, &h->out.bs );注釋掉,但是播放是一樣的

既然注釋掉仍能播,說明它不是必須的,僅是個版權聲明
 
 
猜想:
如果是實時的話,可以模仿下面的這兩句代碼發送序列參數集和圖像參數集:
x264_sps_write( &h->out.bs, h->sps );
x264_pps_write( &h->out.bs, h->pps );

實際就是要發送h->sps和h->pps

因為我編碼的文件是可以播放的,所以實際已經產生了sps和pps,直接發送就行了。

因為h是已知的,h = x264_encoder_open( &param );它的返回值就是x264_t,這樣就可以通過h->sps和h->pps,下面是我將它們單獨寫入文件的截圖:
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 sps_1
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 sps_2
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
sps_3
 
上面是一個sps(sps1,sps_2,sps_3),看著內容好少啊。寫入代碼是:file1.Write(h->sps,sizeof(x264_sps_t));

x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲 
pps


PPS的內容也好少,可能是因為大多數均未指定,采用的是默認參數的原因吧,但是圖像寬度和高度在哪兒了。

h->x264_param_t    param;
這個也很關鍵,因為我指定的都是在這個里,
param.i_width=320;
param.i_height=240;
把這個也保一份看看。

x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
h->PARAM
param.i_width=320;
param.i_height=240;
這兩個數字對應的在哪呢,應該有才對啊,找找。(其實已經有了,只是現在沒找到,看后面)

后來換了個參數值,又試了一下
param.i_width=320;
param.i_height=240;
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
這是i_width 為320和100的比較,一直折騰半天,發現0x64能對應上十進制100,但是320怎么也對不上。
后來又從結構體的存儲上找了半天(我直觀的認為結構體中的變量字段是按順序存在一塊連續空間的,對不對不知道了)

 x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 
我分析,在unsigned int 和int共占8字節,那么第9、10、11、12個字節應該就是i_width,但還是對不上。直到ing提到小頭和大頭,也就是主機字節序和網絡字節序時,才驚醒過來。

原來,前面一直是對的,只是自己看成是錯的了,呵呵。

0x 64 00  ,實際應該看成 0x 00 64  ,換算成二進制表示: 0000 0000  0110 0100
0x 40 01  ,實際應該看成 0x 01 40  ,換算成二進制表示: 0000 0001  0100 0000

x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 
x264編碼得到的文件,在文件頭部的一些東西,有了新發現 - 加菲 - 視頻會議 - 加菲
 


這下就對了。



小結一下:
1、結構體的各字段存儲在一段連續的內存中。
2、主機字節序,用二進制查看器查看到 0x 64 00 ,換算二進制時,要按 0x 00 64這樣反過來。(說法不標準,呵呵)
3、x264.exe編碼得到的文件,前面有一段版權聲明,是沒用的。
4、file1.Write(&(h->param),sizeof(x264_param_t));這樣把h->param寫入二進制文件是正確的。
5、只發送sps和pps可以嗎

posted on 2013-01-23 23:23 楊粼波 閱讀(2014) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久亚洲精品一区| 牛人盗摄一区二区三区视频| 亚洲福利在线观看| 久久aⅴ乱码一区二区三区| 国产精品―色哟哟| 久久精品国产亚洲高清剧情介绍 | 欲色影视综合吧| 老色鬼久久亚洲一区二区| 久久久久久综合| 亚洲精品在线观看免费| 一本一本大道香蕉久在线精品| 国产精品久久久亚洲一区 | 99精品视频免费在线观看| 日韩一区二区免费看| 国产精品日产欧美久久久久| 久久深夜福利| 欧美日韩一区不卡| 久久久久久成人| 欧美高清在线视频观看不卡| 亚洲欧美日本视频在线观看| 久久免费视频观看| 一区二区免费在线观看| 欧美在线电影| 一区二区三区波多野结衣在线观看| 亚洲性感美女99在线| 在线观看一区欧美| 亚洲性人人天天夜夜摸| 亚洲人屁股眼子交8| 亚洲欧美999| 99在线精品视频| 久久久噜噜噜久久中文字幕色伊伊| 一区二区三区日韩在线观看| 国产女主播一区二区三区| 久久久亚洲欧洲日产国码αv| 欧美日韩一区成人| 欧美中文字幕不卡| 老司机67194精品线观看| 亚洲乱码国产乱码精品精| 亚洲欧美精品一区| av成人手机在线| 久久se精品一区精品二区| 中文国产成人精品久久一| 久久久精品日韩欧美| 亚洲午夜精品在线| 欧美.日韩.国产.一区.二区| 欧美在线影院| 国产精品豆花视频| 99ri日韩精品视频| 99国内精品久久久久久久软件| 久久精品国产精品 | 久久久99国产精品免费| 欧美国产高潮xxxx1819| 欧美成人tv| 国内偷自视频区视频综合| 在线视频精品一区| 99re热精品| 欧美破处大片在线视频| 欧美激情麻豆| 亚洲欧洲另类国产综合| 免费看黄裸体一级大秀欧美| 久久综合一区| 在线精品一区二区| 久久久999成人| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美日韩在线直播| 亚洲日韩欧美视频一区| 亚洲国产另类久久久精品极度| 久久久999成人| 欧美风情在线| 亚洲免费大片| 欧美日韩中文字幕| 亚洲一区国产视频| 新67194成人永久网站| 国产目拍亚洲精品99久久精品| 午夜精品福利一区二区蜜股av| 久久国产加勒比精品无码| 国产欧美精品在线播放| 欧美影片第一页| 欧美岛国在线观看| 亚洲人成网站999久久久综合 | 亚洲视频在线二区| 久久黄色网页| 亚洲第一精品在线| 欧美日韩的一区二区| 在线综合欧美| 久久久久久有精品国产| 亚洲区国产区| 国产精品久久久久久久久久三级| 亚洲欧美99| 欧美高清视频在线| 亚洲一二三四久久| 欧美大片18| 亚洲影视在线播放| 欧美日韩亚洲高清一区二区| 亚洲一区精彩视频| 久久男女视频| 亚洲一级黄色| 亚洲电影免费在线观看| 欧美午夜欧美| 久久视频精品在线| 一区二区三区欧美视频| 久久亚洲欧洲| 亚洲字幕在线观看| 亚洲国产专区校园欧美| 国产精品毛片在线看| 美女精品自拍一二三四| 亚洲女优在线| 日韩午夜免费视频| 久久综合九色综合欧美狠狠| 亚洲伊人久久综合| 亚洲精品久久久久久久久久久| 国产模特精品视频久久久久| 欧美精品手机在线| 久久久精品一品道一区| 亚洲无线一线二线三线区别av| 牛人盗摄一区二区三区视频| 久久激情婷婷| 西西裸体人体做爰大胆久久久 | 欧美激情亚洲另类| 久久久无码精品亚洲日韩按摩| 亚洲一区二区av电影| 91久久极品少妇xxxxⅹ软件| 久久野战av| 欧美在线中文字幕| 亚洲综合社区| 在线视频欧美一区| 99re6这里只有精品| 亚洲第一页在线| 伊人久久大香线蕉综合热线| 国产一区二区剧情av在线| 国产精品久久久久久久久久直播| 欧美激情一区三区| 欧美成人一区二免费视频软件| 久久久久久成人| 久久精品夜色噜噜亚洲aⅴ| 午夜伦理片一区| 亚洲欧美日韩国产成人精品影院 | 久久综合久色欧美综合狠狠| 欧美在线free| 欧美中文字幕不卡| 久久精品中文| 久久九九有精品国产23| 久久精品亚洲乱码伦伦中文 | 久久国产精品久久久| 性色av一区二区三区| 欧美亚洲日本网站| 久久精品91久久久久久再现| 久久久久久一区| 老牛嫩草一区二区三区日本 | 亚洲无线视频| 小黄鸭精品aⅴ导航网站入口| 午夜宅男欧美| 久久欧美中文字幕| 欧美成人午夜视频| 亚洲人成人一区二区在线观看| 亚洲精品综合| 亚洲一区二区三| 久久国产黑丝| 欧美激情第三页| 国产精品99免费看 | 欧美激情视频在线播放| 欧美日韩理论| 国产精品久久久久aaaa| 国产视频一区在线观看| 在线精品视频一区二区| 亚洲精品一区二| 亚洲综合导航| 久久在线视频| 亚洲精品一级| 性久久久久久久久久久久| 久久五月天婷婷| 欧美三级午夜理伦三级中文幕| 国产美女在线精品免费观看| 怡红院精品视频在线观看极品| 亚洲人成免费| 欧美一级日韩一级| 欧美黄色片免费观看| 国产精品99久久久久久久vr| 欧美一区二区三区在线观看视频| 美女91精品| 国产欧美日韩视频一区二区| 在线日韩av片| 亚洲在线观看视频网站| 久久久久国色av免费观看性色| 欧美韩日亚洲| 亚洲欧美日本视频在线观看| 免费成人高清视频| 国产精品永久免费在线| 亚洲黄色在线| 久久精品一区蜜桃臀影院| 亚洲精品一二三区| 久久综合伊人77777麻豆| 国产精品日日摸夜夜添夜夜av| 亚洲福利视频免费观看| 亚洲欧美综合一区| 91久久国产综合久久| 久久久99精品免费观看不卡| 国产精品日本精品| 亚洲亚洲精品三区日韩精品在线视频| 男人的天堂亚洲在线|