分享

使用ffmpeg获取视频流后如何封装存储成mp4文件

 青_春 2016-01-07
int main(int argc,char *argv[])
{
 AVFormatContext *pFormatCtx;
 int i,videoStream;
 AVCodecContext *pCodecCtx;
 AVPacket packet;
 //H264Context *h;
 int type=0; 
 //Open video file
 char rtsp[100]="";
 char filename[150]="";
 char *p=NULL;
 char camid[6]="";
 char log[100]="";
 char new_file[200]="";
 char command[200]="";
 char file_jpg[200]="";
 
 if(argc!=3)
 {
  exit(1);
 }
  
 strcpy(rtsp,argv[1]);
 strcpy(filename,argv[2]);
 p=strstr(filename,"cam");
 memcpy(camid,p,5);
 
 signal(SIGTERM,recv_signal);
 signal(SIGUSR1,recv_signal);
 signal(SIGHUP,recv_signal);
 signal(SIGSEGV,recv_signal);
 strcpy(File_Name,filename);
 
 //Register all formats and codecs
 av_register_all();
 avformat_network_init();
 
 if(av_open_input_file(&pFormatCtx,rtsp,NULL,0,NULL)!=0)
 {
  sprintf(log,"%s [%s] %s","The ",rtsp," stream open error\n");
  write_log(camid,log);
  exit(1);
 }
 
 //Retrieve stream information
 if(av_find_stream_info(pFormatCtx)<0)
 {
  sprintf(log,"%s","Video Flow information check error\n");
  write_log(camid,log);
  return -1;
 }
 
 //Dump information about file onto standard error
 av_dump_format(pFormatCtx,0,rtsp,0);
 
 //Find the first video stream
 videoStream=-1;
 for(i=0;i<pFormatCtx->nb_streams;i++)
 {
  if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
  {
   videoStream=i;
   break;
  }
 }
 
 if(videoStream==-1)
 {
  sprintf(log,"%s","Didn't find a video stram\n");
  write_log(camid,log);
  return -1;
 }
 
 pCodecCtx=pFormatCtx->streams[videoStream]->codec;
 //open file
 FILE *fp=NULL;
 //char *filename="/home/MEDIA/project/linux/test.mp4";
 
 if((fp=fopen(filename,"wb"))==NULL)
 {
  sprintf(log,"%s%s",filename," open failed\n");
  write_log(camid,log);
  exit(1);
 }
/*这里打开了一个test.mp4的文件,下面怎么封装存储就不知道了,请各位大哥指导!帮助指点下封装成mp4文件的主要函数部分*/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多