int main( int argc, char *argv[])
|
02 |
{ |
03 |
AVFormatContext *pFormatCtx;
|
04 |
int i,videoStream;
|
05 |
AVCodecContext *pCodecCtx;
|
06 |
AVPacket packet;
|
07 |
//H264Context *h;
|
08 |
int type=0;
|
09 |
//Open video file
|
10 |
char rtsp[100]= "" ;
|
11 |
char filename[150]= "" ;
|
12 |
char *p=NULL;
|
13 |
char camid[6]= "" ;
|
14 |
char log [100]= "" ;
|
15 |
char new_file[200]= "" ;
|
16 |
char command[200]= "" ;
|
17 |
char file_jpg[200]= "" ;
|
18 |
19 |
if (argc!=3)
|
20 |
{
|
21 |
exit (1);
|
22 |
}
|
23 |
|
24 |
strcpy (rtsp,argv[1]);
|
25 |
strcpy (filename,argv[2]);
|
26 |
p= strstr (filename, "cam" );
|
27 |
memcpy (camid,p,5);
|
28 |
29 |
signal (SIGTERM,recv_signal);
|
30 |
signal (SIGUSR1,recv_signal);
|
31 |
signal (SIGHUP,recv_signal);
|
32 |
signal (SIGSEGV,recv_signal);
|
33 |
strcpy (File_Name,filename);
|
34 |
35 |
//Register all formats and codecs
|
36 |
av_register_all();
|
37 |
avformat_network_init();
|
38 |
39 |
if (av_open_input_file(&pFormatCtx,rtsp,NULL,0,NULL)!=0)
|
40 |
{
|
41 |
sprintf ( log , "%s [%s] %s" , "The " ,rtsp, " stream open error\n" );
|
42 |
write_log(camid, log );
|
43 |
exit (1);
|
44 |
}
|
45 |
46 |
//Retrieve stream information
|
47 |
if (av_find_stream_info(pFormatCtx)<0)
|
48 |
{
|
49 |
sprintf ( log , "%s" , "Video Flow information check error\n" );
|
50 |
write_log(camid, log );
|
51 |
return -1;
|
52 |
}
|
53 |
54 |
//Dump information about file onto standard error
|
55 |
av_dump_format(pFormatCtx,0,rtsp,0);
|
56 |
57 |
//Find the first video stream
|
58 |
videoStream=-1;
|
59 |
for (i=0;i<pFormatCtx->nb_streams;i++)
|
60 |
{
|
61 |
if (pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
|
62 |
{
|
63 |
videoStream=i;
|
64 |
break ;
|
65 |
}
|
66 |
}
|
67 |
68 |
if (videoStream==-1)
|
69 |
{
|
70 |
sprintf ( log , "%s" , "Didn't find a video stram\n" );
|
71 |
write_log(camid, log );
|
72 |
return -1;
|
73 |
}
|
74 |
75 |
pCodecCtx=pFormatCtx->streams[videoStream]->codec;
|
76 |
//open file
|
77 |
FILE *fp=NULL;
|
78 |
//char *filename="/home/MEDIA/project/linux/test.mp4";
|
79 |
80 |
if ((fp= fopen (filename, "wb" ))==NULL)
|
81 |
{
|
82 |
sprintf ( log , "%s%s" ,filename, " open failed\n" );
|
83 |
write_log(camid, log );
|
84 |
exit (1);
|
85 |
}
|
86 |
/*这里打开了一个test.mp4的文件,下面怎么封装存储就不知道了,请各位大哥指导!帮助指点下封装成mp4文件的主要函数部分*/ |