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
" ); |
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
" ); |
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
" ); |
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
" ); |
83 |
write_log(camid, log ); |
84 |
exit (1); |
85 |
} |
86 |
/*这里打开了一个test.mp4的文件,下面怎么封装存储就不知道了,请各位大哥指导!帮助指点下封装成mp4文件的主要函数部分*/ |