• 嵌入式 hi3518x平台h264+g711a封装mp4代码demo


    先看代码吧,有代码有真相,具体代码的demo(下载demo的朋友请勿在网上上传我的demo,谢谢)下载连接为:

    http://download.csdn.net/detail/skdkjxy/8071721

    注:代码demo是一个完整的工程,直接进行make x86或者make arm 就可以到目录src下运行可执行文件了。

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <span style="font-family:Courier New;font-size:12px;">  
    2. </span>  
    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <span style="font-family:Courier New;font-size:12px;">#include <fcntl.h>  
    2. #include <stdio.h>  
    3. #include <ctype.h>    
    4. #include <errno.h>  
    5. #include <stdlib.h>  
    6. #include <string.h>  
    7. #include <limits.h>    
    8. #include <unistd.h>  
    9. #include <signal.h>  
    10. #include <dirent.h>  
    11. #include <pthread.h>  
    12.    
    13. #include <asm/types.h>  
    14. #include <arpa/inet.h>  
    15.    
    16. #include <sys/vfs.h>  
    17. #include <sys/time.h>  
    18. #include <sys/wait.h>  
    19. #include <sys/stat.h>   
    20. #include <sys/ioctl.h>  
    21. #include <sys/types.h>  
    22. #include <sys/socket.h>  
    23. #include <sys/utsname.h>   
    24.    
    25. #include <netdb.h>    
    26. #include <net/if.h>  
    27. #include <netinet/in.h>  
    28. #include <net/route.h>  
    29. #include <net/if_arp.h>  
    30.    
    31. #include <linux/fs.h>  
    32. #include <linux/sockios.h>     
    33. #include <linux/netlink.h>  
    34. #include <linux/rtnetlink.h>  
    35.    
    36. #include <netinet/in.h>  
    37. #include <netinet/ip.h>     
    38. #include <netinet/ether.h>  
    39. #include <netinet/ip_icmp.h>    
    40.    
    41. #include "faac.h"  
    42. #include "mp4v2.h"    
    43.    
    44.    
    45. #define  JOSEPH_G711A_LOCATION  "../av_file/test1.g711a"  
    46. #define  JOSEPH_H264_LOCALTION "../av_file/"  
    47. #define  JOSEPH_MP4_FILE   "test.mp4"  
    48.    
    49. #define  MP4_DETAILS_ALL     0xFFFFFFFF  
    50. #define  NALU_SPS  0  
    51. #define  NALU_PPS  1  
    52. #define  NALU_I    2  
    53. #define  NALU_P    3  
    54. #define  NALU_SET  4  
    55.    
    56. typedef unsigned int  uint32_t;  
    57. typedef unsigned char   uint8_t;  
    58.    
    59. typedef struct Joseph_Acc_Config  
    60. {  
    61.     FILE* fpIn;                    //打开的音频文件  
    62.     faacEncHandle hEncoder;        //音频文件描述符  
    63.     unsigned long nSampleRate;     //音频采样数  
    64.     unsigned int nChannels;           //音频声道数  
    65.     unsigned int nPCMBitSize;        //音频采样精度  
    66.     unsigned long nInputSamples;      //每次调用编码时所应接收的原始数据长度  
    67.     unsigned long nMaxOutputBytes;    //每次调用编码时生成的AAC数据的最大长度  
    68.     unsigned char* pbPCMBuffer;       //pcm数据  
    69.     unsigned char* pbAACBuffer;       //aac数据  
    70. }JOSEPH_ACC_CONFIG;  
    71.    
    72. typedef struct Joseph_Mp4_Config  
    73. {  
    74.     FILE* fpInVideo;               //打开的视频文件  
    75.     MP4FileHandle hFile;          //mp4文件描述符  
    76.     MP4TrackId video;              //视频轨道标志符  
    77.     MP4TrackId audio;              //音频轨道标志符  
    78.     int m_vFrameDur;               //帧间隔时间  
    79.     unsigned int timeScale;        //视频每秒的ticks数,如90000  
    80.     unsigned int fps;              //视频帧率  
    81.     unsigned short width;          //视频宽  
    82.     unsigned short height;         //视频高  
    83. }JOSEPH_MP4_CONFIG;  
    84.    
    85. /********************************************************g711a encode decode**********************************************/  
    86. static const int16_t alawtos16[256] =  
    87. {  
    88.      -5504,  -5248,  -6016,  -5760,  -4480,  -4224,  -4992,  -4736,  
    89.      -7552,  -7296,  -8064,  -7808,  -6528,  -6272,  -7040,  -6784,  
    90.      -2752,  -2624,  -3008,  -2880,  -2240,  -2112,  -2496,  -2368,  
    91.      -3776,  -3648,  -4032,  -3904,  -3264,  -3136,  -3520,  -3392,  
    92.     -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,  
    93.     -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,  
    94.     -11008, -10496, -12032, -11520,  -8960,  -8448,  -9984,  -9472,  
    95.     -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,  
    96.       -344,   -328,   -376,   -360,   -280,   -264,   -312,   -296,  
    97.       -472,   -456,   -504,   -488,   -408,   -392,   -440,   -424,  
    98.        -88,    -72,   -120,   -104,    -24,     -8,    -56,    -40,  
    99.       -216,   -200,   -248,   -232,   -152,   -136,   -184,   -168,  
    100.      -1376,  -1312,  -1504,  -1440,  -1120,  -1056,  -1248,  -1184,  
    101.      -1888,  -1824,  -2016,  -1952,  -1632,  -1568,  -1760,  -1696,  
    102.       -688,   -656,   -752,   -720,   -560,   -528,   -624,   -592,  
    103.       -944,   -912,  -1008,   -976,   -816,   -784,   -880,   -848,  
    104.       5504,   5248,   6016,   5760,   4480,   4224,   4992,   4736,  
    105.       7552,   7296,   8064,   7808,   6528,   6272,   7040,   6784,  
    106.       2752,   2624,   3008,   2880,   2240,   2112,   2496,   2368,  
    107.       3776,   3648,   4032,   3904,   3264,   3136,   3520,   3392,  
    108.      22016,  20992,  24064,  23040,  17920,  16896,  19968,  18944,  
    109.      30208,  29184,  32256,  31232,  26112,  25088,  28160,  27136,  
    110.      11008,  10496,  12032,  11520,   8960,   8448,   9984,   9472,  
    111.      15104,  14592,  16128,  15616,  13056,  12544,  14080,  13568,  
    112.        344,    328,    376,    360,    280,    264,    312,    296,  
    113.        472,    456,    504,    488,    408,    392,    440,    424,  
    114.         88,     72,    120,    104,     24,      8,     56,     40,  
    115.        216,    200,    248,    232,    152,    136,    184,    168,  
    116.       1376,   1312,   1504,   1440,   1120,   1056,   1248,   1184,  
    117.       1888,   1824,   2016,   1952,   1632,   1568,   1760,   1696,  
    118.        688,    656,    752,    720,    560,    528,    624,    592,  
    119.        944,    912,   1008,    976,    816,    784,    880,    848  
    120. };  
    121.    
    122. static const int8_t alaw_encode[2049] =  
    123. {  
    124.     0xD5, 0xD4, 0xD7, 0xD6, 0xD1, 0xD0, 0xD3, 0xD2, 0xDD, 0xDC, 0xDF, 0xDE,  
    125.     0xD9, 0xD8, 0xDB, 0xDA, 0xC5, 0xC4, 0xC7, 0xC6, 0xC1, 0xC0, 0xC3, 0xC2,  
    126.     0xCD, 0xCC, 0xCF, 0xCE, 0xC9, 0xC8, 0xCB, 0xCA, 0xF5, 0xF5, 0xF4, 0xF4,  
    127.     0xF7, 0xF7, 0xF6, 0xF6, 0xF1, 0xF1, 0xF0, 0xF0, 0xF3, 0xF3, 0xF2, 0xF2,  
    128.     0xFD, 0xFD, 0xFC, 0xFC, 0xFF, 0xFF, 0xFE, 0xFE, 0xF9, 0xF9, 0xF8, 0xF8,  
    129.     0xFB, 0xFB, 0xFA, 0xFA, 0xE5, 0xE5, 0xE5, 0xE5, 0xE4, 0xE4, 0xE4, 0xE4,  
    130.     0xE7, 0xE7, 0xE7, 0xE7, 0xE6, 0xE6, 0xE6, 0xE6, 0xE1, 0xE1, 0xE1, 0xE1,  
    131.     0xE0, 0xE0, 0xE0, 0xE0, 0xE3, 0xE3, 0xE3, 0xE3, 0xE2, 0xE2, 0xE2, 0xE2,  
    132.     0xED, 0xED, 0xED, 0xED, 0xEC, 0xEC, 0xEC, 0xEC, 0xEF, 0xEF, 0xEF, 0xEF,  
    133.     0xEE, 0xEE, 0xEE, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xE8, 0xE8, 0xE8, 0xE8,  
    134.     0xEB, 0xEB, 0xEB, 0xEB, 0xEA, 0xEA, 0xEA, 0xEA, 0x95, 0x95, 0x95, 0x95,  
    135.     0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,  
    136.     0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96,  
    137.     0x96, 0x96, 0x96, 0x96, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,  
    138.     0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x93, 0x93, 0x93, 0x93,  
    139.     0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,  
    140.     0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9C, 0x9C,  
    141.     0x9C, 0x9C, 0x9C, 0x9C, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,  
    142.     0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99,  
    143.     0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,  
    144.     0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x9A,  
    145.     0x9A, 0x9A, 0x9A, 0x9A, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,  
    146.     0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,  
    147.     0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,  
    148.     0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,  
    149.     0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,  
    150.     0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x81, 0x81, 0x81, 0x81,  
    151.     0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,  
    152.     0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,  
    153.     0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,  
    154.     0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,  
    155.     0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,  
    156.     0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,  
    157.     0x8D, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,  
    158.     0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8F, 0x8F, 0x8F, 0x8F,  
    159.     0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,  
    160.     0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,  
    161.     0x8E, 0x8E, 0x8E, 0x8E, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,  
    162.     0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,  
    163.     0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,  
    164.     0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,  
    165.     0x8B, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,  
    166.     0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0xB5, 0xB5, 0xB5, 0xB5,  
    167.     0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,  
    168.     0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,  
    169.     0xB5, 0xB5, 0xB5, 0xB5, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,  
    170.     0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,  
    171.     0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,  
    172.     0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,  
    173.     0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,  
    174.     0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6, 0xB6, 0xB6, 0xB6,  
    175.     0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,  
    176.     0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,  
    177.     0xB6, 0xB6, 0xB6, 0xB6, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,  
    178.     0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,  
    179.     0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,  
    180.     0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,  
    181.     0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,  
    182.     0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB3, 0xB3, 0xB3, 0xB3,  
    183.     0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,  
    184.     0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,  
    185.     0xB3, 0xB3, 0xB3, 0xB3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,  
    186.     0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,  
    187.     0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,  
    188.     0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,  
    189.     0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,  
    190.     0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBC, 0xBC, 0xBC, 0xBC,  
    191.     0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,  
    192.     0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,  
    193.     0xBC, 0xBC, 0xBC, 0xBC, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,  
    194.     0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,  
    195.     0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,  
    196.     0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,  
    197.     0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,  
    198.     0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xB9, 0xB9, 0xB9, 0xB9,  
    199.     0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,  
    200.     0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,  
    201.     0xB9, 0xB9, 0xB9, 0xB9, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,  
    202.     0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,  
    203.     0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,  
    204.     0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,  
    205.     0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,  
    206.     0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBA, 0xBA, 0xBA, 0xBA,  
    207.     0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,  
    208.     0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,  
    209.     0xBA, 0xBA, 0xBA, 0xBA, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,  
    210.     0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,  
    211.     0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,  
    212.     0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,  
    213.     0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,  
    214.     0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4,  
    215.     0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,  
    216.     0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,  
    217.     0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,  
    218.     0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,  
    219.     0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,  
    220.     0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,  
    221.     0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,  
    222.     0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,  
    223.     0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,  
    224.     0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,  
    225.     0xA7, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,  
    226.     0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,  
    227.     0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,  
    228.     0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,  
    229.     0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,  
    230.     0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA1, 0xA1, 0xA1, 0xA1,  
    231.     0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,  
    232.     0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,  
    233.     0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,  
    234.     0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,  
    235.     0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,  
    236.     0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,  
    237.     0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,  
    238.     0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,  
    239.     0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,  
    240.     0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,  
    241.     0xA0, 0xA0, 0xA0, 0xA0, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,  
    242.     0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,  
    243.     0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,  
    244.     0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,  
    245.     0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,  
    246.     0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA2,  
    247.     0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,  
    248.     0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,  
    249.     0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,  
    250.     0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,  
    251.     0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,  
    252.     0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,  
    253.     0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,  
    254.     0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,  
    255.     0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,  
    256.     0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,  
    257.     0xAD, 0xAD, 0xAD, 0xAD, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,  
    258.     0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,  
    259.     0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,  
    260.     0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,  
    261.     0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,  
    262.     0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAF, 0xAF, 0xAF, 0xAF,  
    263.     0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,  
    264.     0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,  
    265.     0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,  
    266.     0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,  
    267.     0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,  
    268.     0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,  
    269.     0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,  
    270.     0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,  
    271.     0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,  
    272.     0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,  
    273.     0xAE, 0xAE, 0xAE, 0xAE, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,  
    274.     0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,  
    275.     0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,  
    276.     0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,  
    277.     0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,  
    278.     0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA8, 0xA8, 0xA8, 0xA8,  
    279.     0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,  
    280.     0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,  
    281.     0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,  
    282.     0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,  
    283.     0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,  
    284.     0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,  
    285.     0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,  
    286.     0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,  
    287.     0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,  
    288.     0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,  
    289.     0xAB, 0xAB, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,  
    290.     0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,  
    291.     0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,  
    292.     0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,  
    293.     0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,  
    294.     0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A  
    295. };   
    296.    
    297. int g711a_decode(void *pout_buf, int *pout_len, const void *pin_buf, const int  in_len)  
    298. {  
    299.     int16_t *dst = (int16_t *)pout_buf;  
    300.     uint8_t *src = (uint8_t *)pin_buf;  
    301.     uint32_t i = 0;  
    302.     int Ret = 0;  
    303.        
    304.     if ( (NULL == pout_buf)  
    305.         || (NULL == pout_len)  
    306.         || (NULL == pin_buf)  
    307.         || (0 == in_len) )  
    308.     {  
    309.         return -1;  
    310.     }  
    311.        
    312.     if ( *pout_len < 2 * in_len )  
    313.     {  
    314.         return -2;  
    315.     }  
    316.        
    317.     for( i = 0; i < in_len; i++ )  
    318.     {  
    319.         *(dst++) = alawtos16[*(src++)];  
    320.     }  
    321.        
    322.     Ret = 2 * in_len;  
    323.        
    324.     return Ret;  
    325. }  
    326.    
    327. int g711a_encode(void *pout_buf, int *pout_len, const void *pin_buf, const int in_len)  
    328. {  
    329.     int8_t *dst = (int8_t *)pout_buf;  
    330.     int16_t *src = (int16_t *)pin_buf;  
    331.     uint32_t i = 0;  
    332.     int Ret = 0;  
    333.        
    334.     if ( (NULL == pout_buf)  
    335.         || (NULL == pout_len)  
    336.         || (NULL == pin_buf)  
    337.         || (0 == in_len) )  
    338.     {  
    339.         return -1;  
    340.     }  
    341.        
    342.     if ( *pout_len < in_len / 2 )  
    343.     {  
    344.         return -2;  
    345.     }  
    346.        
    347.     for( i = 0; i < in_len / 2; i++ )  
    348.     {  
    349.         int16_t s = *(src++);  
    350.         if( s >= 0)  
    351.         {  
    352.             *(dst++) = alaw_encode[s / 16];  
    353.         }  
    354.         else  
    355.         {  
    356.             *(dst++) = 0x7F & alaw_encode[s / -16];  
    357.         }  
    358.     }  
    359.        
    360.     Ret = in_len / 2;  
    361.        
    362.     return Ret;  
    363. }  
    364.    
    365. int joseph_get_g711a_frame(JOSEPH_MP4_CONFIG* joseph_mp4_config, unsigned char *nVideoBuffer, int nVideoRet)  
    366. {         
    367.     int nVideoSize = 0;  
    368.     char nVideoNum[32] = {0};  
    369.     memset(nVideoNum, 0, 32);  
    370.     sprintf(nVideoNum, "%s%d", JOSEPH_H264_LOCALTION, nVideoRet);  
    371.     joseph_mp4_config->fpInVideo = fopen(nVideoNum, "rb");  
    372.     memset(nVideoBuffer, 0, 1048576);  
    373.     nVideoSize = fread(nVideoBuffer, 1, 1048576, joseph_mp4_config->fpInVideo);  
    374.    
    375.     fclose(joseph_mp4_config->fpInVideo);  
    376.        
    377.     return nVideoSize;  
    378. }  
    379.    
    380. /***********************************************************mp4 encode***********************************************/  
    381. JOSEPH_MP4_CONFIG* InitMp4Encoder(JOSEPH_ACC_CONFIG* joseph_aac_config)  
    382. {  
    383.     JOSEPH_MP4_CONFIG *joseph_mp4_config = NULL;  
    384.     joseph_mp4_config =(JOSEPH_MP4_CONFIG *)malloc(sizeof(JOSEPH_MP4_CONFIG));  
    385.        
    386.     joseph_mp4_config->m_vFrameDur = 0;  
    387.     joseph_mp4_config->video = MP4_INVALID_TRACK_ID;   
    388.     joseph_mp4_config->audio = MP4_INVALID_TRACK_ID;  
    389.     joseph_mp4_config->hFile = NULL;  
    390.     joseph_mp4_config->timeScale = 90000;      
    391.     joseph_mp4_config->fps = 25;                
    392.     joseph_mp4_config->width = 640;            
    393.     joseph_mp4_config->height = 480;   
    394.        
    395.     /*file handle*/  
    396.     joseph_mp4_config->hFile = MP4Create(JOSEPH_MP4_FILE, 0);  
    397.     if(joseph_mp4_config->hFile == MP4_INVALID_FILE_HANDLE)  
    398.     {  
    399.         printf("open file fialed. ");  
    400.         return NULL;  
    401.     }  
    402.     MP4SetTimeScale(joseph_mp4_config->hFile, joseph_mp4_config->timeScale);    //timeScale  
    403.        
    404.     /*audio track*/  
    405.     joseph_mp4_config->audio = MP4AddAudioTrack(joseph_mp4_config->hFile, joseph_aac_config->nSampleRate,   
    406.                                                     joseph_aac_config->nInputSamples, MP4_MPEG4_AUDIO_TYPE);  
    407.     if(joseph_mp4_config->audio == MP4_INVALID_TRACK_ID)  
    408.     {  
    409.         printf("add audio track failed. ");  
    410.         return NULL;  
    411.     }  
    412.        
    413.     MP4SetAudioProfileLevel(joseph_mp4_config->hFile, 0x2);  
    414.     unsigned char aacConfig[2] = {0x15, 0x88};                                               // 0001 0101 1000 1000  
    415.     MP4SetTrackESConfiguration(joseph_mp4_config->hFile, joseph_mp4_config->audio, aacConfig, 2);  
    416.        
    417.     return joseph_mp4_config;  
    418. }  
    419.    
    420. //------------------------------------------------------------------------------------------------- Mp4Encode说明  
    421. // 【h264编码出的NALU规律】  
    422. // 第一帧 SPS【0 0 0 1 0x67】 PPS【0 0 0 1 0x68】 SEI【0 0 0 1 0x6】 IDR【0 0 0 1 0x65】  
    423. // p帧      P【0 0 0 1 0x61】  
    424. // I帧    SPS【0 0 0 1 0x67】 PPS【0 0 0 1 0x68】 IDR【0 0 0 1 0x65】  
    425. // 【mp4v2封装函数MP4WriteSample】  
    426. // 此函数接收I/P nalu,该nalu需要用4字节的数据大小头替换原有的起始头,并且数据大小为big-endian格式  
    427. //-------------------------------------------------------------------------------------------------  
    428. int Mp4VEncode(JOSEPH_MP4_CONFIG* joseph_mp4_config, unsigned char* naluData, int naluSize)  
    429. {  
    430.     int index = -1;  
    431.        
    432.     if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x67)  
    433.     {  
    434.         index = NALU_SPS;  
    435.         printf("%s[%d]====NALU_SPS ",__FUNCTION__,__LINE__);  
    436.     }  
    437.     if(index!=NALU_SPS && joseph_mp4_config->video == MP4_INVALID_TRACK_ID)  
    438.     {  
    439.         return -1;  
    440.     }  
    441.     if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x68)  
    442.     {  
    443.         index = NALU_PPS;  
    444.         printf("%s[%d]====NALU_PPS ",__FUNCTION__,__LINE__);  
    445.     }  
    446.     if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x65)  
    447.     {  
    448.         index = NALU_I;  
    449.         printf("%s[%d]====NALU_I ",__FUNCTION__,__LINE__);  
    450.     }  
    451.     if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x61)  
    452.     {  
    453.         index = NALU_P;  
    454.         printf("%s[%d]====NALU_P ",__FUNCTION__,__LINE__);  
    455.     }  
    456.     if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x6)  
    457.     {  
    458.         index = NALU_SET;  
    459.         printf("%s[%d]====NALU_SET ",__FUNCTION__,__LINE__);  
    460.     }  
    461.        
    462.     switch(index)  
    463.     {  
    464.         case NALU_SPS:           
    465.             if(joseph_mp4_config->video == MP4_INVALID_TRACK_ID)  
    466.             {  
    467.                 joseph_mp4_config->video = MP4AddH264VideoTrack    
    468.                     (joseph_mp4_config->hFile,     
    469.                     joseph_mp4_config->timeScale,                               //timeScale  
    470.                     (joseph_mp4_config->timeScale / joseph_mp4_config->fps),    //sampleDuration    timeScale/fps  
    471.                     joseph_mp4_config->width,                                    // width    
    472.                     joseph_mp4_config->height,                                   // height    
    473.                     naluData[5],                                                // sps[1] AVCProfileIndication    
    474.                     naluData[6],                                                // sps[2] profile_compat    
    475.                     naluData[7],                                                // sps[3] AVCLevelIndication    
    476.                     3);                                                         // 4 bytes length before each NAL unit    
    477.                 if(joseph_mp4_config->video == MP4_INVALID_TRACK_ID)  
    478.                 {  
    479.                     printf("add video track failed. ");  
    480.                     return -1;  
    481.                 }  
    482.                 //MP4SetVideoProfileLevel(joseph_mp4_config->hFile, 1); //  Simple Profile @ Level 3   mp4编码标准  
    483.                 MP4SetVideoProfileLevel(joseph_mp4_config->hFile, 0x7F); //  Simple Profile @ Level 3  
    484.             }    
    485.             MP4AddH264SequenceParameterSet(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData+4, naluSize-4);    
    486.             break;  
    487.         case NALU_PPS:    
    488.             MP4AddH264PictureParameterSet(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData+4, naluSize-4);    
    489.             break;  
    490.         case NALU_SET:    
    491.             MP4AddH264PictureParameterSet(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData+4, naluSize-4);    
    492.             break;  
    493.         case NALU_I:   
    494.             {  
    495.                 unsigned char* IFrameData = (unsigned char*)malloc((naluSize)* sizeof(unsigned char));  
    496.                    
    497.                 IFrameData[0] = (naluSize-4) >>24;    
    498.                 IFrameData[1] = (naluSize-4) >>16;    
    499.                 IFrameData[2] = (naluSize-4) >>8;    
    500.                 IFrameData[3] = (naluSize-4) &0xff;    
    501.                    
    502.                 memcpy(IFrameData+4, naluData+4, naluSize-4);  
    503.                 //if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, IFrameData, naluSize+1, m_vFrameDur/8000*90000, 0, 1))  
    504.                 if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, IFrameData, naluSize, MP4_INVALID_DURATION, 0, 1))  
    505.                 {    
    506.                     return -1;    
    507.                 }    
    508.                    
    509.                 //joseph_mp4_config->m_vFrameDur = 0;  
    510.                 free(IFrameData);   
    511.                 IFrameData = NULL;  
    512.                    
    513.                 break;  
    514.             }  
    515.         case NALU_P:  
    516.             {  
    517.                 naluData[0] = (naluSize-4) >>24;    
    518.                 naluData[1] = (naluSize-4) >>16;    
    519.                 naluData[2] = (naluSize-4) >>8;    
    520.                 naluData[3] = (naluSize-4) &0xff;   
    521.                    
    522.                 //if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData, naluSize, m_vFrameDur/8000*90000, 0, 1))  
    523.                 if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData, naluSize, MP4_INVALID_DURATION, 0, 1))  
    524.                 {    
    525.                     return -1;    
    526.                 }  
    527.                    
    528.                 //joseph_mp4_config->m_vFrameDur = 0;  
    529.                    
    530.                 break;  
    531.             }  
    532.         default:  
    533.             break;  
    534.     }  
    535.            
    536.     return 0;  
    537. }  
    538.    
    539. int Mp4AEncode(JOSEPH_MP4_CONFIG* joseph_mp4_config, unsigned char* aacData, int aacSize)  
    540. {  
    541.     if(joseph_mp4_config->video == MP4_INVALID_TRACK_ID)  
    542.     {  
    543.         return -1;  
    544.     }  
    545.     MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->audio, aacData, aacSize , MP4_INVALID_DURATION, 0, 1);  
    546.        
    547.     //joseph_mp4_config->m_vFrameDur += 1024;  
    548.        
    549.     return 0;  
    550. }  
    551.    
    552. void CloseMp4Encoder(JOSEPH_MP4_CONFIG* joseph_mp4_config)  
    553. {  
    554.     if(joseph_mp4_config->hFile)  
    555.     {    
    556.         MP4Close(joseph_mp4_config->hFile, 0);    
    557.         joseph_mp4_config->hFile = NULL;    
    558.     }  
    559.        
    560.     return ;  
    561. }  
    562. /*************************************************aac encode******************************************/  
    563. JOSEPH_ACC_CONFIG* InitAccEncoder(void)  
    564. {  
    565.     JOSEPH_ACC_CONFIG* joseph_aac_config = NULL;  
    566.        
    567.     faacEncConfigurationPtr pConfiguration;  
    568.        
    569.     int nRet = 0;  
    570.     int nPCMBufferSize = 0;  
    571.        
    572.     joseph_aac_config = (JOSEPH_ACC_CONFIG*)malloc(sizeof(JOSEPH_ACC_CONFIG));  
    573.        
    574.     joseph_aac_config->nSampleRate = 8000;  
    575.     joseph_aac_config->nChannels = 1;  
    576.     joseph_aac_config->nPCMBitSize = 16;  
    577.     joseph_aac_config->nInputSamples = 0;  
    578.     joseph_aac_config->nMaxOutputBytes = 0;  
    579.        
    580.     joseph_aac_config->fpIn = fopen(JOSEPH_G711A_LOCATION, "rb");  
    581.        
    582.     //open FAAC engine  
    583.     joseph_aac_config->hEncoder = faacEncOpen(joseph_aac_config->nSampleRate, joseph_aac_config->nChannels,   
    584.                                 &joseph_aac_config->nInputSamples, &joseph_aac_config->nMaxOutputBytes);  
    585.     if(joseph_aac_config->hEncoder == NULL)  
    586.     {  
    587.         printf("failed to call faacEncOpen() ");  
    588.         return NULL;  
    589.     }  
    590.        
    591.     nPCMBufferSize = (joseph_aac_config->nInputSamples*(joseph_aac_config->nPCMBitSize/8));  
    592.     joseph_aac_config->pbPCMBuffer=(unsigned char*)malloc(nPCMBufferSize*sizeof(unsigned char));  
    593.     memset(joseph_aac_config->pbPCMBuffer, 0, nPCMBufferSize);  
    594.     joseph_aac_config->pbAACBuffer=(unsigned char*)malloc(joseph_aac_config->nMaxOutputBytes*sizeof(unsigned char));  
    595.     memset(joseph_aac_config->pbAACBuffer, 0, joseph_aac_config->nMaxOutputBytes);  
    596.        
    597.     //GET current encoding configuration  
    598.     pConfiguration = faacEncGetCurrentConfiguration(joseph_aac_config->hEncoder);  
    599. #if 1  
    600.     pConfiguration->inputFormat = FAAC_INPUT_16BIT;  
    601.     pConfiguration->outputFormat = 0;  
    602.         pConfiguration->aacObjectType = LOW;  
    603. #else  
    604.     pConfiguration->inputFormat = FAAC_INPUT_16BIT;  
    605.    
    606.     /*0 - raw; 1 - ADTS*/  
    607.     pConfiguration->outputFormat = 0;  
    608.     pConfiguration->useTns = 0;  
    609.     pConfiguration->allowMidside = 1;  
    610.     pConfiguration->shortctl = SHORTCTL_NORMAL;  
    611.     pConfiguration->aacObjectType = LOW;  
    612.     pConfiguration->mpegVersion = MPEG2;  
    613. #endif    
    614.     //set encoding configuretion  
    615.     nRet = faacEncSetConfiguration(joseph_aac_config->hEncoder, pConfiguration);  
    616.        
    617.     return joseph_aac_config;  
    618. }  
    619. void CloseAccEncoder(JOSEPH_ACC_CONFIG* joseph_aac_config)  
    620. {  
    621.     if(joseph_aac_config->hEncoder)  
    622.     {    
    623.         faacEncClose(joseph_aac_config->hEncoder);    
    624.         joseph_aac_config->hEncoder = NULL;    
    625.     }  
    626.        
    627.     return ;  
    628. }  
    629. /*********************************************main**************************************************/  
    630. int main(int argc, char* argv[])  
    631. {     
    632.     JOSEPH_ACC_CONFIG *joseph_aac_config = NULL;  
    633.     JOSEPH_MP4_CONFIG *joseph_mp4_config = NULL;  
    634.        
    635.     int nRet = 0;  
    636.     int nTmp = 0;  
    637.     int nCount = 0;  
    638.     int nStatus = 0;  
    639.     int PCMSize = 320;  
    640.     int nPCMRead = 0;  
    641.     int nVideoRet = 0;    
    642.     int gBytesRead = 0;  
    643.     int nVideoSize = 0;  
    644.     int nPCMBufferSize = 0;  
    645.        
    646.     unsigned char nVideoBuffer[1048576] = {0};  
    647.        
    648.     unsigned char *pPCM = NULL;  
    649.     unsigned char *pbG711ABuffer = NULL;  
    650.     unsigned char *pbPCMTmpBuffer = NULL;  
    651.        
    652.     pbG711ABuffer = (unsigned char *)malloc(164 *sizeof(unsigned char));  
    653.     memset(pbG711ABuffer, 0, 164);    
    654.     pbPCMTmpBuffer = (unsigned char *)malloc(PCMSize *sizeof(unsigned char));  
    655.     memset(pbPCMTmpBuffer, 0, PCMSize);  
    656.                    
    657.     /*init aac */  
    658.     if((joseph_aac_config=InitAccEncoder()) == NULL)  
    659.     {  
    660.         printf("init aac failed ");  
    661.         return -1;  
    662.     }  
    663.        
    664.     /*init mp4*/  
    665.     if((joseph_mp4_config=InitMp4Encoder(joseph_aac_config)) == NULL)  
    666.     {  
    667.         printf("init mp4 failed ");  
    668.         return -1;  
    669.     }     
    670.        
    671.     nPCMBufferSize = (joseph_aac_config->nInputSamples*(joseph_aac_config->nPCMBitSize/8));  
    672.        
    673.     /*write video audio frame*/  
    674.     while(((gBytesRead = fread(pbG711ABuffer, 1, 164, joseph_aac_config->fpIn)) >0) && (nVideoRet < 312))  
    675.     {  
    676.         nStatus = 0;  
    677.            
    678.         /*hisi audio the first 4 bytes is error*/  
    679.         pPCM = pbG711ABuffer + 4;  
    680.         memset(pbPCMTmpBuffer, 0, PCMSize);  
    681.         memset(joseph_aac_config->pbAACBuffer, 0, joseph_aac_config->nMaxOutputBytes);  
    682.            
    683.         /*g711 to pcm*/  
    684.         if((nPCMRead = g711a_decode(pbPCMTmpBuffer,  &PCMSize,  pPCM,  gBytesRead-4)) < 0)  
    685.         {  
    686.             printf(" G711A -> PCM  fail ");  
    687.             break;  
    688.         }  
    689.            
    690.         /*pcm to aac*/  
    691.         if((nPCMBufferSize - nCount) < nPCMRead)  
    692.         {  
    693.    
    694.             nStatus = 1;  
    695.             memcpy((joseph_aac_config->pbPCMBuffer + nCount), pbPCMTmpBuffer, (nPCMBufferSize - nCount));  
    696.             joseph_aac_config->nInputSamples = (nPCMBufferSize / (joseph_aac_config->nPCMBitSize / 8));  
    697.             nRet = faacEncEncode(joseph_aac_config->hEncoder, (int*) (joseph_aac_config->pbPCMBuffer),   
    698.                                     joseph_aac_config->nInputSamples, joseph_aac_config->pbAACBuffer, joseph_aac_config->nMaxOutputBytes);  
    699.    
    700. #if 1                                 
    701.             /*get video frame*/  
    702.             nVideoSize = joseph_get_g711a_frame(joseph_mp4_config, nVideoBuffer, nVideoRet);  
    703.             if(nVideoSize < 0)  
    704.             {  
    705.                 printf("read g711a frame failed ");  
    706.                 break;  
    707.             }  
    708.             nVideoRet++;  
    709.                
    710.             /*write video frame to mp4*/  
    711.             if((Mp4VEncode(joseph_mp4_config, nVideoBuffer, nVideoSize)) < 0)  
    712.             {  
    713.                 printf("write video frame failed ");  
    714.                 break;  
    715.             }  
    716. #endif  
    717. #if 1                         
    718.             /*write audio frame to mp4*/  
    719.             if((Mp4AEncode(joseph_mp4_config, joseph_aac_config->pbAACBuffer, nRet)) < 0)  
    720.             {  
    721.                 printf("write audio frame failed ");  
    722.                 break;  
    723.             }  
    724. #endif            
    725.             /*Treatment of redundant frames*/  
    726.             nTmp = (nPCMRead - (nPCMBufferSize - nCount));  
    727.             memset(joseph_aac_config->pbPCMBuffer, 0, nPCMBufferSize);  
    728.             memcpy(joseph_aac_config->pbPCMBuffer, (pbPCMTmpBuffer + (nPCMBufferSize-nCount)), nTmp);  
    729.             nCount = 0;  
    730.             nCount += nTmp;  
    731.                
    732.         }  
    733.         if( nStatus == 0)  
    734.         {  
    735.             memcpy(joseph_aac_config->pbPCMBuffer + nCount, pbPCMTmpBuffer, nPCMRead);  
    736.             nCount += nPCMRead;  
    737.         }  
    738.         if(nPCMRead < 320)  
    739.         {  
    740.             joseph_aac_config->nInputSamples = (nCount / (joseph_aac_config->nPCMBitSize / 8));  
    741.             nRet = faacEncEncode(joseph_aac_config->hEncoder, (int*) (joseph_aac_config->pbPCMBuffer),   
    742.                                     joseph_aac_config->nInputSamples, joseph_aac_config->pbAACBuffer, joseph_aac_config->nMaxOutputBytes);  
    743. #if 1             
    744.             /*get video frame*/  
    745.             nVideoSize = joseph_get_g711a_frame(joseph_mp4_config, nVideoBuffer, nVideoRet);  
    746.             if(nVideoSize < 0)  
    747.             {  
    748.                 printf("read g711a frame failed ");  
    749.                 break;  
    750.             }  
    751.             nVideoRet++;  
    752.                
    753.             /*write video frame to mp4*/  
    754.             if((Mp4VEncode(joseph_mp4_config, nVideoBuffer, nVideoSize)) < 0)  
    755.             {  
    756.                 printf("write video frame failed ");  
    757.                 break;  
    758.             }  
    759. #endif  
    760. #if 1  
    761.             /*write audio frame to mp4*/  
    762.             if((Mp4AEncode(joseph_mp4_config, joseph_aac_config->pbAACBuffer, nRet)) < 0)  
    763.             {  
    764.                 printf("write audio frame failed ");  
    765.                 break;  
    766.             }  
    767. #endif            
    768.         }  
    769.            
    770.         memset(pbG711ABuffer, 0, 164);    
    771.     }  
    772.        
    773.     /*Close FAAC engine*/  
    774.     CloseAccEncoder(joseph_aac_config);  
    775.     CloseMp4Encoder(joseph_mp4_config);  
    776.        
    777.     /*close file fp*/  
    778.     fclose(joseph_aac_config->fpIn);  
    779.        
    780.     /*free the source of malloc*/  
    781.     //audio part  
    782.     free(joseph_aac_config->pbPCMBuffer);  
    783.     joseph_aac_config->pbPCMBuffer = NULL;  
    784.     free(joseph_aac_config->pbAACBuffer);  
    785.     joseph_aac_config->pbAACBuffer = NULL;  
    786.     free(pbG711ABuffer);  
    787.     pbG711ABuffer = NULL;  
    788.     free(pbPCMTmpBuffer);  
    789.     pbPCMTmpBuffer = NULL;  
    790.     free(joseph_aac_config);  
    791.     joseph_aac_config = NULL;  
    792.     //video part  
    793.     free(joseph_mp4_config);  
    794.     joseph_mp4_config = NULL;  
    795.    
    796.     printf("%s:[%d] The sys changover succeed ! ",__FUNCTION__,__LINE__);    
    797.     return 0;  
    798. }</span>  
  • 相关阅读:
    jQuery之第4章 jQuery中的事件和动画
    jQuery之第3章 jQuery中的DOM操作
    jQuery之第2章 jQuery选择器
    输入一组学生的姓名和成绩,根据成绩降序排名。
    抽象类和接口
    pingpong线程输出问题
    sql优化
    [leedcode 242] Valid Anagram
    [leedcode 241] Different Ways to Add Parentheses
    [leedcode 240] Search a 2D Matrix II
  • 原文地址:https://www.cnblogs.com/lidabo/p/5384003.html
Copyright © 2020-2023  润新知