zoukankan      html  css  js  c++  java
  • 使用ffmpeg获取视频流后如何封装存储成mp4文件

    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文件的主要函数部分*/
  • 相关阅读:
    JVM调优
    【转】中文分词之HMM模型详解
    xwiki enterprise 8.4.5使用https步骤
    dubbo和shiro的整合,在服务端做权限验证
    电商课题:分布式锁
    Export large data from Gridview and Datareader to an Excel file using C#
    sap学习笔记
    git拉取远程分支并创建本地分支
    Echarts 解决饼图文字过长重叠的问题
    用localStorage坚持Vuex状态----vuex-persistedstate
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3516800.html
Copyright © 2011-2022 走看看