hik.leo

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo  发布于  2016-06-30 11:41:37
采纳率 0%
15个问答
4558

海思平台mp4文件封装

 
海思平台mp4文件封装,请大神们指导
我来回答
回答14个
时间排序
认可量排序

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-30 14:37:56
认可0
本帖最后由 ngswfx 于 2016-7-3 09:43 编辑

附件:[url]http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=4032&highlight=mp4[/url]

////////////看看这个源码行不行


还有这个:
[url]http://download.csdn.net/detail/skdkjxy/8071721[/url]

////////////估计差不多吧,里面应该有.a静态库,直接调用即可。

myearth

0个粉丝

3

问答

0

专栏

3

资料

myearth 2016-06-30 15:02:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32895&ptid=11804]ngswfx 发表于 2016-6-30 14:37[/url]
http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=4032&highlight=mp4

////////////看看这个源 ...[/quote]

请介绍一下功能,谢谢:lol

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-06-30 16:00:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32901&ptid=11804]myearth 发表于 2016-6-30 15:02[/url]
请介绍一下功能,谢谢[/quote]

我还真没看具体代码,只知道里面能把海斯编码出来的264数据包,弄成mp4文件,joseph_mp4.tar.gz里面就是多了个编译好的.a文件,用的海斯编译器nptl100编译的。能通过。

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-02 22:40:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32895&ptid=11804]ngswfx 发表于 2016-6-30 14:37[/url]
http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=4032&highlight=mp4

////////////看看这个源 ...[/quote]

.a如何编译?这个.a已经编译好了,只能适用对应的平台

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-02 23:14:24
认可0
本帖最后由 ngswfx 于 2016-7-2 23:37 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=33059&ptid=11804]hik.leo 发表于 2016-7-2 22:40[/url]
.a如何编译?这个.a已经编译好了,只能适用对应的平台[/quote]

libmp4v2.a libfaac.a就是编译好的,只能用在uclibc环境.  还有一个是x86的版本,也是.a  ,这2个库要是能找到源码就好了。你可以网上搜索一下,如果能找到,就更方便下,但对于海斯,只要用uclibc,估计问题也不大,glibc我没试过,用这个libmp4v2.a能否编译出执行程序来。

//////////利用里面的例子,用nptl100可以编译通过,得到执行程序。

例子代码:

#include
#include
#include   
#include
#include
#include
#include   
#include
#include
#include
#include

#include
#include

#include
#include
#include
#include
#include
#include
#include
#include

#include   
#include
#include
#include
#include

#include
#include    
#include
#include

#include
#include    
#include
#include   

#include "faac.h"
#include "mp4v2.h"  


#define  JOSEPH_G711A_LOCATION  "../av_file/test1.g711a"
#define  JOSEPH_H264_LOCALTION "../av_file/"
#define  JOSEPH_MP4_FILE   "test.mp4"

#define  MP4_DETAILS_ALL         0xFFFFFFFF
#define  NALU_SPS  0
#define  NALU_PPS  1
#define  NALU_I    2
#define  NALU_P    3
#define  NALU_SET  4

typedef unsigned int  uint32_t;
typedef unsigned char   uint8_t;

typedef struct Joseph_Acc_Config
{
        FILE* fpIn;                    //打开的音频文件
        faacEncHandle hEncoder;        //音频文件描述符
        unsigned long nSampleRate;     //音频采样数
        unsigned int nChannels;                //音频声道数
        unsigned int nPCMBitSize;        //音频采样精度
        unsigned long nInputSamples;      //每次调用编码时所应接收的原始数据长度
        unsigned long nMaxOutputBytes;    //每次调用编码时生成的AAC数据的最大长度
        unsigned char* pbPCMBuffer;       //pcm数据
        unsigned char* pbAACBuffer;       //aac数据
}JOSEPH_ACC_CONFIG;

typedef struct Joseph_Mp4_Config
{
        FILE* fpInVideo;               //打开的视频文件
        MP4FileHandle hFile;          //mp4文件描述符
        MP4TrackId video;              //视频轨道标志符
        MP4TrackId audio;              //音频轨道标志符
        int m_vFrameDur;               //帧间隔时间
        unsigned int timeScale;        //视频每秒的ticks数,如90000
        unsigned int fps;              //视频帧率
        unsigned short width;          //视频宽
        unsigned short height;         //视频高
}JOSEPH_MP4_CONFIG;

/********************************************************g711a encode decode**********************************************/
static const int16_t alawtos16[256] =
{
     -5504,  -5248,  -6016,  -5760,  -4480,  -4224,  -4992,  -4736,
     -7552,  -7296,  -8064,  -7808,  -6528,  -6272,  -7040,  -6784,
     -2752,  -2624,  -3008,  -2880,  -2240,  -2112,  -2496,  -2368,
     -3776,  -3648,  -4032,  -3904,  -3264,  -3136,  -3520,  -3392,
    -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
    -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
    -11008, -10496, -12032, -11520,  -8960,  -8448,  -9984,  -9472,
    -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,
      -344,   -328,   -376,   -360,   -280,   -264,   -312,   -296,
      -472,   -456,   -504,   -488,   -408,   -392,   -440,   -424,
       -88,    -72,   -120,   -104,    -24,     -8,    -56,    -40,
      -216,   -200,   -248,   -232,   -152,   -136,   -184,   -168,
     -1376,  -1312,  -1504,  -1440,  -1120,  -1056,  -1248,  -1184,
     -1888,  -1824,  -2016,  -1952,  -1632,  -1568,  -1760,  -1696,
      -688,   -656,   -752,   -720,   -560,   -528,   -624,   -592,
      -944,   -912,  -1008,   -976,   -816,   -784,   -880,   -848,
      5504,   5248,   6016,   5760,   4480,   4224,   4992,   4736,
      7552,   7296,   8064,   7808,   6528,   6272,   7040,   6784,
      2752,   2624,   3008,   2880,   2240,   2112,   2496,   2368,
      3776,   3648,   4032,   3904,   3264,   3136,   3520,   3392,
     22016,  20992,  24064,  23040,  17920,  16896,  19968,  18944,
     30208,  29184,  32256,  31232,  26112,  25088,  28160,  27136,
     11008,  10496,  12032,  11520,   8960,   8448,   9984,   9472,
     15104,  14592,  16128,  15616,  13056,  12544,  14080,  13568,
       344,    328,    376,    360,    280,    264,    312,    296,
       472,    456,    504,    488,    408,    392,    440,    424,
        88,     72,    120,    104,     24,      8,     56,     40,
       216,    200,    248,    232,    152,    136,    184,    168,
      1376,   1312,   1504,   1440,   1120,   1056,   1248,   1184,
      1888,   1824,   2016,   1952,   1632,   1568,   1760,   1696,
       688,    656,    752,    720,    560,    528,    624,    592,
       944,    912,   1008,    976,    816,    784,    880,    848
};

static const int8_t alaw_encode[2049] =
{
    0xD5, 0xD4, 0xD7, 0xD6, 0xD1, 0xD0, 0xD3, 0xD2, 0xDD, 0xDC, 0xDF, 0xDE,
    0xD9, 0xD8, 0xDB, 0xDA, 0xC5, 0xC4, 0xC7, 0xC6, 0xC1, 0xC0, 0xC3, 0xC2,
    0xCD, 0xCC, 0xCF, 0xCE, 0xC9, 0xC8, 0xCB, 0xCA, 0xF5, 0xF5, 0xF4, 0xF4,
    0xF7, 0xF7, 0xF6, 0xF6, 0xF1, 0xF1, 0xF0, 0xF0, 0xF3, 0xF3, 0xF2, 0xF2,
    0xFD, 0xFD, 0xFC, 0xFC, 0xFF, 0xFF, 0xFE, 0xFE, 0xF9, 0xF9, 0xF8, 0xF8,
    0xFB, 0xFB, 0xFA, 0xFA, 0xE5, 0xE5, 0xE5, 0xE5, 0xE4, 0xE4, 0xE4, 0xE4,
    0xE7, 0xE7, 0xE7, 0xE7, 0xE6, 0xE6, 0xE6, 0xE6, 0xE1, 0xE1, 0xE1, 0xE1,
    0xE0, 0xE0, 0xE0, 0xE0, 0xE3, 0xE3, 0xE3, 0xE3, 0xE2, 0xE2, 0xE2, 0xE2,
    0xED, 0xED, 0xED, 0xED, 0xEC, 0xEC, 0xEC, 0xEC, 0xEF, 0xEF, 0xEF, 0xEF,
    0xEE, 0xEE, 0xEE, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xE8, 0xE8, 0xE8, 0xE8,
    0xEB, 0xEB, 0xEB, 0xEB, 0xEA, 0xEA, 0xEA, 0xEA, 0x95, 0x95, 0x95, 0x95,
    0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
    0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96,
    0x96, 0x96, 0x96, 0x96, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
    0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x93, 0x93, 0x93, 0x93,
    0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
    0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9C, 0x9C,
    0x9C, 0x9C, 0x9C, 0x9C, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
    0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99,
    0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
    0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x9A,
    0x9A, 0x9A, 0x9A, 0x9A, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
    0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,
    0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
    0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
    0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
    0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x81, 0x81, 0x81, 0x81,
    0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
    0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
    0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
    0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
    0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
    0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
    0x8D, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
    0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8F, 0x8F, 0x8F, 0x8F,
    0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
    0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
    0x8E, 0x8E, 0x8E, 0x8E, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
    0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
    0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
    0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
    0x8B, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
    0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0xB5, 0xB5, 0xB5, 0xB5,
    0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
    0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
    0xB5, 0xB5, 0xB5, 0xB5, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
    0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
    0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
    0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
    0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
    0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6, 0xB6, 0xB6, 0xB6,
    0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
    0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
    0xB6, 0xB6, 0xB6, 0xB6, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
    0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
    0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
    0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
    0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
    0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB3, 0xB3, 0xB3, 0xB3,
    0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
    0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
    0xB3, 0xB3, 0xB3, 0xB3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
    0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
    0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
    0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
    0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
    0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBC, 0xBC, 0xBC, 0xBC,
    0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
    0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
    0xBC, 0xBC, 0xBC, 0xBC, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
    0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
    0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
    0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
    0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
    0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xB9, 0xB9, 0xB9, 0xB9,
    0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
    0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
    0xB9, 0xB9, 0xB9, 0xB9, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
    0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
    0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
    0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
    0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
    0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBA, 0xBA, 0xBA, 0xBA,
    0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
    0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
    0xBA, 0xBA, 0xBA, 0xBA, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
    0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
    0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
    0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
    0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
    0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4,
    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
    0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
    0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
    0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
    0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
    0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
    0xA7, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
    0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA1, 0xA1, 0xA1, 0xA1,
    0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
    0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
    0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
    0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
    0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
    0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
    0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
    0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
    0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
    0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
    0xA0, 0xA0, 0xA0, 0xA0, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
    0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
    0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
    0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
    0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
    0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA2,
    0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
    0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
    0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
    0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
    0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
    0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
    0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
    0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
    0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
    0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
    0xAD, 0xAD, 0xAD, 0xAD, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
    0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
    0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
    0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
    0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
    0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAF, 0xAF, 0xAF, 0xAF,
    0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
    0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
    0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
    0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
    0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
    0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
    0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
    0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
    0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
    0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
    0xAE, 0xAE, 0xAE, 0xAE, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
    0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
    0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
    0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
    0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
    0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA8, 0xA8, 0xA8, 0xA8,
    0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
    0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
    0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
    0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
    0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
    0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
    0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
    0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
    0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
    0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
    0xAB, 0xAB, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
    0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A
};

int g711a_decode(void *pout_buf, int *pout_len, const void *pin_buf, const int  in_len)
{
    int16_t *dst = (int16_t *)pout_buf;
    uint8_t *src = (uint8_t *)pin_buf;
    uint32_t i = 0;
        int Ret = 0;
       
    if ( (NULL == pout_buf)
        || (NULL == pout_len)
        || (NULL == pin_buf)
        || (0 == in_len) )
    {
        return -1;
    }
   
    if ( *pout_len < 2 * in_len )
    {
        return -2;
    }
   
    for( i = 0; i < in_len; i++ )
    {
        *(dst++) = alawtos16[*(src++)];
    }
   
        Ret = 2 * in_len;
       
    return Ret;
}

int g711a_encode(void *pout_buf, int *pout_len, const void *pin_buf, const int in_len)
{
    int8_t *dst = (int8_t *)pout_buf;
    int16_t *src = (int16_t *)pin_buf;
    uint32_t i = 0;
    int Ret = 0;
       
    if ( (NULL == pout_buf)
        || (NULL == pout_len)
        || (NULL == pin_buf)
        || (0 == in_len) )
    {
        return -1;
    }
   
    if ( *pout_len < in_len / 2 )
    {
        return -2;
    }
   
    for( i = 0; i < in_len / 2; i++ )
    {
        int16_t s = *(src++);
        if( s >= 0)
        {
            *(dst++) = alaw_encode[s / 16];
        }
        else
        {
            *(dst++) = 0x7F & alaw_encode[s / -16];
        }
    }
   
        Ret = in_len / 2;
   
        return Ret;
}

int joseph_get_g711a_frame(JOSEPH_MP4_CONFIG* joseph_mp4_config, unsigned char *nVideoBuffer, int nVideoRet)
{               
        int nVideoSize = 0;
        char nVideoNum[32] = {0};
        memset(nVideoNum, 0, 32);
        sprintf(nVideoNum, "%s%d", JOSEPH_H264_LOCALTION, nVideoRet);
        joseph_mp4_config->fpInVideo = fopen(nVideoNum, "rb");
        memset(nVideoBuffer, 0, 1048576);
        nVideoSize = fread(nVideoBuffer, 1, 1048576, joseph_mp4_config->fpInVideo);

        fclose(joseph_mp4_config->fpInVideo);
       
        return nVideoSize;
}

/***********************************************************mp4 encode***********************************************/
JOSEPH_MP4_CONFIG* InitMp4Encoder(JOSEPH_ACC_CONFIG* joseph_aac_config)
{
        JOSEPH_MP4_CONFIG *joseph_mp4_config = NULL;
        joseph_mp4_config =(JOSEPH_MP4_CONFIG *)malloc(sizeof(JOSEPH_MP4_CONFIG));
       
        joseph_mp4_config->m_vFrameDur = 0;
        joseph_mp4_config->video = MP4_INVALID_TRACK_ID;       
        joseph_mp4_config->audio = MP4_INVALID_TRACK_ID;
        joseph_mp4_config->hFile = NULL;
        joseph_mp4_config->timeScale = 90000;       
        joseph_mp4_config->fps = 25;              
        joseph_mp4_config->width = 640;         
        joseph_mp4_config->height = 480;
       
        /*file handle*/
        joseph_mp4_config->hFile = MP4Create(JOSEPH_MP4_FILE, 0);
        if(joseph_mp4_config->hFile == MP4_INVALID_FILE_HANDLE)
        {
        printf("open file fialed.\n");
        return NULL;
    }
        MP4SetTimeScale(joseph_mp4_config->hFile, joseph_mp4_config->timeScale);    //timeScale
       
        /*audio track*/
        joseph_mp4_config->audio = MP4AddAudioTrack(joseph_mp4_config->hFile, joseph_aac_config->nSampleRate, \
                                                                                                        joseph_aac_config->nInputSamples, MP4_MPEG4_AUDIO_TYPE);
        if(joseph_mp4_config->audio == MP4_INVALID_TRACK_ID)
    {
        printf("add audio track failed.\n");
        return NULL;
    }
       
        MP4SetAudioProfileLevel(joseph_mp4_config->hFile, 0x2);
        unsigned char aacConfig[2] = {0x15, 0x88};                                               // 0001 0101 1000 1000
        MP4SetTrackESConfiguration(joseph_mp4_config->hFile, joseph_mp4_config->audio, aacConfig, 2);
       
        return joseph_mp4_config;
}

//------------------------------------------------------------------------------------------------- Mp4Encode说明
// 【h264编码出的NALU规律】
// 第一帧 SPS【0 0 0 1 0x67】 PPS【0 0 0 1 0x68】 SEI【0 0 0 1 0x6】 IDR【0 0 0 1 0x65】
// p帧      P【0 0 0 1 0x61】
// I帧    SPS【0 0 0 1 0x67】 PPS【0 0 0 1 0x68】 IDR【0 0 0 1 0x65】
// 【mp4v2封装函数MP4WriteSample】
// 此函数接收I/P nalu,该nalu需要用4字节的数据大小头替换原有的起始头,并且数据大小为big-endian格式
//-------------------------------------------------------------------------------------------------
int Mp4VEncode(JOSEPH_MP4_CONFIG* joseph_mp4_config, unsigned char* naluData, int naluSize)
{
        int index = -1;
       
        if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x67)
        {
                index = NALU_SPS;
                printf("%s[%d]====NALU_SPS\n",__FUNCTION__,__LINE__);
        }
        if(index!=NALU_SPS && joseph_mp4_config->video == MP4_INVALID_TRACK_ID)
        {
                return -1;
        }
        if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x68)
        {
                index = NALU_PPS;
                printf("%s[%d]====NALU_PPS\n",__FUNCTION__,__LINE__);
        }
        if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x65)
        {
                index = NALU_I;
                printf("%s[%d]====NALU_I\n",__FUNCTION__,__LINE__);
        }
        if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x61)
        {
                index = NALU_P;
                printf("%s[%d]====NALU_P\n",__FUNCTION__,__LINE__);
        }
        if(naluData[0]==0 && naluData[1]==0 && naluData[2]==0 && naluData[3]==1 && naluData[4]==0x6)
        {
                index = NALU_SET;
                printf("%s[%d]====NALU_SET\n",__FUNCTION__,__LINE__);
        }
       
        switch(index)
        {
                case NALU_SPS:         
                        if(joseph_mp4_config->video == MP4_INVALID_TRACK_ID)
                        {
                                joseph_mp4_config->video = MP4AddH264VideoTrack  
                                        (joseph_mp4_config->hFile,   
                                        joseph_mp4_config->timeScale,                               //timeScale
                                        (joseph_mp4_config->timeScale / joseph_mp4_config->fps),    //sampleDuration    timeScale/fps
                                        joseph_mp4_config->width,                                                                     // width  
                                        joseph_mp4_config->height,                                                                    // height  
                                        naluData[5],                                                                                                 // sps[1] AVCProfileIndication  
                                        naluData[6],                                                                                                 // sps[2] profile_compat  
                                        naluData[7],                                                                                                 // sps[3] AVCLevelIndication  
                                        3);                                                                                                           // 4 bytes length before each NAL unit  
                                if(joseph_mp4_config->video == MP4_INVALID_TRACK_ID)
                                {
                                        printf("add video track failed.\n");
                                        return -1;
                                }
                                //MP4SetVideoProfileLevel(joseph_mp4_config->hFile, 1); //  Simple Profile @ Level 3   mp4编码标准
                                MP4SetVideoProfileLevel(joseph_mp4_config->hFile, 0x7F); //  Simple Profile @ Level 3
                        }  
                        MP4AddH264SequenceParameterSet(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData+4, naluSize-4);  
                        break;
                case NALU_PPS:  
                        MP4AddH264PictureParameterSet(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData+4, naluSize-4);  
                        break;
                case NALU_SET:  
                        MP4AddH264PictureParameterSet(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData+4, naluSize-4);  
                        break;
                case NALU_I:
                        {
                                unsigned char* IFrameData = (unsigned char*)malloc((naluSize)* sizeof(unsigned char));
                               
                                IFrameData[0] = (naluSize-4) >>24;  
                                IFrameData[1] = (naluSize-4) >>16;  
                                IFrameData[2] = (naluSize-4) >>8;  
                                IFrameData[3] = (naluSize-4) &0xff;  
                               
                                memcpy(IFrameData+4, naluData+4, naluSize-4);
                                //if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, IFrameData, naluSize+1, m_vFrameDur/8000*90000, 0, 1))
                                if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, IFrameData, naluSize, MP4_INVALID_DURATION, 0, 1))
                                {  
                                        return -1;  
                                }  
                               
                                //joseph_mp4_config->m_vFrameDur = 0;
                                free(IFrameData);
                                IFrameData = NULL;
                               
                                break;
                        }
                case NALU_P:
                        {
                                naluData[0] = (naluSize-4) >>24;  
                                naluData[1] = (naluSize-4) >>16;  
                                naluData[2] = (naluSize-4) >>8;  
                                naluData[3] = (naluSize-4) &0xff;
                               
                                //if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData, naluSize, m_vFrameDur/8000*90000, 0, 1))
                                if(!MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->video, naluData, naluSize, MP4_INVALID_DURATION, 0, 1))
                                {  
                                        return -1;  
                                }
                               
                                //joseph_mp4_config->m_vFrameDur = 0;
                               
                                break;
                        }
                default:
                        break;
        }
               
        return 0;
}

int Mp4AEncode(JOSEPH_MP4_CONFIG* joseph_mp4_config, unsigned char* aacData, int aacSize)
{
        if(joseph_mp4_config->video == MP4_INVALID_TRACK_ID)
        {
                return -1;
        }
        MP4WriteSample(joseph_mp4_config->hFile, joseph_mp4_config->audio, aacData, aacSize , MP4_INVALID_DURATION, 0, 1);
       
        //joseph_mp4_config->m_vFrameDur += 1024;
       
        return 0;
}

void CloseMp4Encoder(JOSEPH_MP4_CONFIG* joseph_mp4_config)
{
        if(joseph_mp4_config->hFile)
        {  
                MP4Close(joseph_mp4_config->hFile, 0);  
                joseph_mp4_config->hFile = NULL;  
        }
       
        return ;
}
/*************************************************aac encode******************************************/
JOSEPH_ACC_CONFIG* InitAccEncoder(void)
{
        JOSEPH_ACC_CONFIG* joseph_aac_config = NULL;
       
        faacEncConfigurationPtr pConfiguration;
       
        int nRet = 0;
        int nPCMBufferSize = 0;
       
        joseph_aac_config = (JOSEPH_ACC_CONFIG*)malloc(sizeof(JOSEPH_ACC_CONFIG));
       
        joseph_aac_config->nSampleRate = 8000;
        joseph_aac_config->nChannels = 1;
        joseph_aac_config->nPCMBitSize = 16;
        joseph_aac_config->nInputSamples = 0;
        joseph_aac_config->nMaxOutputBytes = 0;
       
        joseph_aac_config->fpIn = fopen(JOSEPH_G711A_LOCATION, "rb");
       
        //open FAAC engine
        joseph_aac_config->hEncoder = faacEncOpen(joseph_aac_config->nSampleRate, joseph_aac_config->nChannels, \
                                                                &joseph_aac_config->nInputSamples, &joseph_aac_config->nMaxOutputBytes);
        if(joseph_aac_config->hEncoder == NULL)
        {
                printf("failed to call faacEncOpen()\n");
                return NULL;
        }
       
        nPCMBufferSize = (joseph_aac_config->nInputSamples*(joseph_aac_config->nPCMBitSize/8));
        joseph_aac_config->pbPCMBuffer=(unsigned char*)malloc(nPCMBufferSize*sizeof(unsigned char));
        memset(joseph_aac_config->pbPCMBuffer, 0, nPCMBufferSize);
        joseph_aac_config->pbAACBuffer=(unsigned char*)malloc(joseph_aac_config->nMaxOutputBytes*sizeof(unsigned char));
        memset(joseph_aac_config->pbAACBuffer, 0, joseph_aac_config->nMaxOutputBytes);
       
        //GET current encoding configuration
        pConfiguration = faacEncGetCurrentConfiguration(joseph_aac_config->hEncoder);
#if 1
        pConfiguration->inputFormat = FAAC_INPUT_16BIT;
        pConfiguration->outputFormat = 0;
        pConfiguration->aacObjectType = LOW;
#else
        pConfiguration->inputFormat = FAAC_INPUT_16BIT;

        /*0 - raw; 1 - ADTS*/
        pConfiguration->outputFormat = 0;
    pConfiguration->useTns = 0;
        pConfiguration->allowMidside = 1;
        pConfiguration->shortctl = SHORTCTL_NORMAL;
    pConfiguration->aacObjectType = LOW;
    pConfiguration->mpegVersion = MPEG2;
#endif       
        //set encoding configuretion
        nRet = faacEncSetConfiguration(joseph_aac_config->hEncoder, pConfiguration);
       
        return joseph_aac_config;
}
void CloseAccEncoder(JOSEPH_ACC_CONFIG* joseph_aac_config)
{
        if(joseph_aac_config->hEncoder)
        {  
                faacEncClose(joseph_aac_config->hEncoder);  
                joseph_aac_config->hEncoder = NULL;  
        }
       
        return ;
}
/*********************************************main**************************************************/
int main(int argc, char* argv[])
{       
        JOSEPH_ACC_CONFIG *joseph_aac_config = NULL;
        JOSEPH_MP4_CONFIG *joseph_mp4_config = NULL;
       
        int nRet = 0;
        int nTmp = 0;
        int nCount = 0;
        int nStatus = 0;
        int PCMSize = 320;
        int nPCMRead = 0;
        int nVideoRet = 0;       
        int gBytesRead = 0;
        int nVideoSize = 0;
        int nPCMBufferSize = 0;
       
        unsigned char nVideoBuffer[1048576] = {0};
       
        unsigned char *pPCM = NULL;
        unsigned char *pbG711ABuffer = NULL;
        unsigned char *pbPCMTmpBuffer = NULL;
       
        pbG711ABuffer = (unsigned char *)malloc(164 *sizeof(unsigned char));
        memset(pbG711ABuffer, 0, 164);       
        pbPCMTmpBuffer = (unsigned char *)malloc(PCMSize *sizeof(unsigned char));
        memset(pbPCMTmpBuffer, 0, PCMSize);
                               
        /*init aac */
        if((joseph_aac_config=InitAccEncoder()) == NULL)
        {
                printf("init aac failed\n");
                return -1;
        }
       
        /*init mp4*/
        if((joseph_mp4_config=InitMp4Encoder(joseph_aac_config)) == NULL)
        {
                printf("init mp4 failed\n");
                return -1;
        }       
       
        nPCMBufferSize = (joseph_aac_config->nInputSamples*(joseph_aac_config->nPCMBitSize/8));
       
        /*write video audio frame*/
        while(((gBytesRead = fread(pbG711ABuffer, 1, 164, joseph_aac_config->fpIn)) >0) && (nVideoRet < 312))
        {
                nStatus = 0;
               
                /*hisi audio the first 4 bytes is error*/
                pPCM = pbG711ABuffer + 4;
                memset(pbPCMTmpBuffer, 0, PCMSize);
                memset(joseph_aac_config->pbAACBuffer, 0, joseph_aac_config->nMaxOutputBytes);
               
                /*g711 to pcm*/
                if((nPCMRead = g711a_decode(pbPCMTmpBuffer,  &PCMSize,  pPCM,  gBytesRead-4)) < 0)
                {
                        printf(" G711A -> PCM  fail\n");
                        break;
                }
               
                /*pcm to aac*/
                if((nPCMBufferSize - nCount) < nPCMRead)
                {

                        nStatus = 1;
                        memcpy((joseph_aac_config->pbPCMBuffer + nCount), pbPCMTmpBuffer, (nPCMBufferSize - nCount));
                        joseph_aac_config->nInputSamples = (nPCMBufferSize / (joseph_aac_config->nPCMBitSize / 8));
                        nRet = faacEncEncode(joseph_aac_config->hEncoder, (int*) (joseph_aac_config->pbPCMBuffer), \
                                                                        joseph_aac_config->nInputSamples, joseph_aac_config->pbAACBuffer, joseph_aac_config->nMaxOutputBytes);

#if 1                                                               
                        /*get video frame*/
                        nVideoSize = joseph_get_g711a_frame(joseph_mp4_config, nVideoBuffer, nVideoRet);
                        if(nVideoSize < 0)
                        {
                                printf("read g711a frame failed\n");
                                break;
                        }
                        nVideoRet++;
                       
                        /*write video frame to mp4*/
                        if((Mp4VEncode(joseph_mp4_config, nVideoBuffer, nVideoSize)) < 0)
                        {
                                printf("write video frame failed\n");
                                break;
                        }
#endif
#if 1                                               
                        /*write audio frame to mp4*/
                        if((Mp4AEncode(joseph_mp4_config, joseph_aac_config->pbAACBuffer, nRet)) < 0)
                        {
                                printf("write audio frame failed\n");
                                break;
                        }
#endif                       
                        /*Treatment of redundant frames*/
                        nTmp = (nPCMRead - (nPCMBufferSize - nCount));
                        memset(joseph_aac_config->pbPCMBuffer, 0, nPCMBufferSize);
                        memcpy(joseph_aac_config->pbPCMBuffer, (pbPCMTmpBuffer + (nPCMBufferSize-nCount)), nTmp);
                        nCount = 0;
                        nCount += nTmp;
                       
                }
                if( nStatus == 0)
                {
                        memcpy(joseph_aac_config->pbPCMBuffer + nCount, pbPCMTmpBuffer, nPCMRead);
                        nCount += nPCMRead;
                }
                if(nPCMRead < 320)
                {
                        joseph_aac_config->nInputSamples = (nCount / (joseph_aac_config->nPCMBitSize / 8));
                        nRet = faacEncEncode(joseph_aac_config->hEncoder, (int*) (joseph_aac_config->pbPCMBuffer), \
                                                                        joseph_aac_config->nInputSamples, joseph_aac_config->pbAACBuffer, joseph_aac_config->nMaxOutputBytes);
#if 1                       
                        /*get video frame*/
                        nVideoSize = joseph_get_g711a_frame(joseph_mp4_config, nVideoBuffer, nVideoRet);
                        if(nVideoSize < 0)
                        {
                                printf("read g711a frame failed\n");
                                break;
                        }
                        nVideoRet++;
                       
                        /*write video frame to mp4*/
                        if((Mp4VEncode(joseph_mp4_config, nVideoBuffer, nVideoSize)) < 0)
                        {
                                printf("write video frame failed\n");
                                break;
                        }
#endif
#if 1
                        /*write audio frame to mp4*/
                        if((Mp4AEncode(joseph_mp4_config, joseph_aac_config->pbAACBuffer, nRet)) < 0)
                        {
                                printf("write audio frame failed\n");
                                break;
                        }
#endif                       
                }
               
                memset(pbG711ABuffer, 0, 164);       
        }
       
        /*Close FAAC engine*/
        CloseAccEncoder(joseph_aac_config);
        CloseMp4Encoder(joseph_mp4_config);
       
        /*close file fp*/
        fclose(joseph_aac_config->fpIn);
       
        /*free the source of malloc*/
        //audio part
        free(joseph_aac_config->pbPCMBuffer);
        joseph_aac_config->pbPCMBuffer = NULL;
        free(joseph_aac_config->pbAACBuffer);
        joseph_aac_config->pbAACBuffer = NULL;
        free(pbG711ABuffer);
        pbG711ABuffer = NULL;
        free(pbPCMTmpBuffer);
        pbPCMTmpBuffer = NULL;
        free(joseph_aac_config);
        joseph_aac_config = NULL;
        //video part
        free(joseph_mp4_config);
        joseph_mp4_config = NULL;

        printf("%s:[%d] The sys changover succeed !\n",__FUNCTION__,__LINE__);       
        return 0;
}

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-03 09:24:18
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33060&ptid=11804]ngswfx 发表于 2016-7-2 23:14[/url]
libmp4v2.a libfaac.a就是编译好的,只能用在uclibc环境.  还有一个是x86的版本,也是.a  ,这2个库要 ...[/quote]

uclibc 也有V100, V300版本区别,比如3516A. 这岂不是只能用在3518E上了?

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-03 09:37:54
认可0
本帖最后由 ngswfx 于 2016-7-3 09:39 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=33062&ptid=11804]hik.leo 发表于 2016-7-3 09:24[/url]
uclibc 也有V100, V300版本区别,比如3516A. 这岂不是只能用在3518E上了?[/quote]

只要是uclibc的估计,都可以,我测试了glibc的V400,编译都可以过。

你从CSDN上下载下来,自己研究一下,最简单了。

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-03 11:18:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33063&ptid=11804]ngswfx 发表于 2016-7-3 09:37[/url]
只要是uclibc的估计,都可以,我测试了glibc的V400,编译都可以过。

你从CSDN上下载下来,自己研究一 ...[/quote]

这样啊? 不太可能吧,比如3518E是arm9内核的,3516A是crotex-A7内核的,能通用?

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-03 12:59:00
认可0
本帖最后由 ngswfx 于 2016-7-3 13:20 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=33067&ptid=11804]hik.leo 发表于 2016-7-3 11:18[/url]
这样啊? 不太可能吧,比如3518E是arm9内核的,3516A是crotex-A7内核的,能通用?[/quote]



它这个代码估计没有用到特定的指令,都是通用的,和CPU没啥关系。平时我们写的程序之所以不通用,是因为调用的海斯的专用接口,而这些接口内部访问了GPU里面的硬件级别的编码解码单元。

普通的代码部分其实没有使用硬件相关部分,所以是通用的。

我自己写的QT界面程序,用nptlv100编译的,给3520D用的,直接弄到3536上,都不用修改,直接就能运行。我现在就这么用着呢。也懒的再编译成V300的版本了。

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-03 13:24:47
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33070&ptid=11804]ngswfx 发表于 2016-7-3 12:59[/url]
它这个代码估计没有用到特定的指令,都是通用的,和CPU没啥关系。平时我们写的程序之所以不通用, ...[/quote]

哦,那倒可以试试。另外,我下载了那个库源码,尝试去重新编译,但是遇到问题。

-g -O2 -fvisibility=hidden   -o mp4trackdump util/mp4trackdump.o libmp4v2.la   
libtool: link: arm-hisiv300-linux-g++ -Wall -Wformat -g -O2 -fvisibility=hidden -o .libs/mp4trackdump util/mp4trackdump.o  ./.libs/libmp4v2.so -Wl,-rpath -Wl,/home/leo/share/mp4v2-2.0.0/install/lib
help2man -m "MP4v2 Utilities" -N ./mp4art -o doc/man/man1/mp4art.1
help2man: can't get `--help' info from ./mp4art
Try `--no-discard-stderr' if option outputs to stderr

make: *** [doc/man/man1/mp4art.1] Error 2

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-03 13:42:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33071&ptid=11804]hik.leo 发表于 2016-7-3 13:24[/url]
哦,那倒可以试试。另外,我下载了那个库源码,尝试去重新编译,但是遇到问题。

-g -O2 -fvisibility= ...[/quote]

没编译过mp4v2这个东西,我也不懂

old_ghost_he

0个粉丝

2

问答

0

专栏

1

资料

old_ghost_he 2016-07-14 17:50:24
认可0
本帖最后由 old_ghost_he 于 2016-7-15 09:37 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=33071&ptid=11804]hik.leo 发表于 2016-7-3 13:24[/url]
哦,那倒可以试试。另外,我下载了那个库源码,尝试去重新编译,但是遇到问题。

-g -O2 -fvisibility= ...[/quote]

我这里没有遇到问题哦。我用的Hi3518E的。编译顺序为:
1、下载mp4v2的源代码([url]http://code.google.com/p/mp4v2/downloads/list[/url])mp4v2-2.0.0.tar.bz2
2、将源代码至于目前的项目代码中。
   放在现有的项目代码中,是因为现有代码对编译的环境变量进行了集中定义,即build/envsetup.sh。
3、解压缩代码tar -xjvf mp4v2-2.0.0.tar.bz2
4、cd mp4v2-2.0.0/
   rm -fr build/
   mkdir build/
   cd build/
   ../configure --prefix=/root/hi3518/my/mp4v2-2.0.0/build/mylib --host=arm-hisiv100-linux CC=arm-hisiv100-linux-uclibcgnueabi-gcc
   make
   make install
5、编译出.a 和 .so文件就在/root/hi3518/my/mp4v2-2.0.0/build/mylib/lib文件夹中了,include文件夹中是MP4v2的包含文件。

hik.leo

0个粉丝

15

问答

0

专栏

1

资料

hik.leo 2016-07-15 10:51:33
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33994&ptid=11804]old_ghost_he 发表于 2016-7-14 17:50[/url]
我这里没有遇到问题哦。我用的Hi3518E的。编译顺序为:
1、下载mp4v2的源代码(http://code.google.co ...[/quote]

好的。 我是用16A编译的。  

wonrowl

0个粉丝

10

问答

0

专栏

2

资料

wonrowl 2016-07-18 16:47:49
认可0
霍霍霍霍,,,,,v100编译的在v300上可以运行,反过来可能出问题,所以,既然是100编译的大家就直接用吧,
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区