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文件的主要函数部分*/ |
原文:http://www.cnblogs.com/pengkunfan/p/3516800.html