使用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\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文件的主要函数部分*/ |
使用ffmpeg获取视频流后如何封装存储成mp4文件的更多相关文章
- ffmpeg学习(二) 通过rtsp获取H264裸流并保存到mp4文件
本篇将使用上节http://www.cnblogs.com/wenjingu/p/3977015.html中编译好的库文件通过rtsp获取网络上的h264裸流并保存到mp4文件中. 1.VS2010建 ...
- jmeter使用问题——将接口返回变量存储成csv文件
在使用jmeter做接口测试时,一整个jmx测试计划中,存在多个线程,多个接口的测试 但是接口可以分类,比如业务接口.查询接口.更新接口等 考虑自动化接口测试一般都是一次性的,有完整的闭环链路,一般步 ...
- 【转】Python爬取AES加密的m3u8视频流的小电影并转换成mp4
最近发现一个视频网站,准备去爬取得时候,前面很顺利利用fiddler抓包获取网站的post数据loads为python字典数据,分析数据就能发现每个视频的连接地址就在其中, 发现这些都是m3u8文件流 ...
- Ffmpeg 获取USB Camera 视频流
本文讲述的案例是如何通过Ffmpeg实现从USB Camera中获取视频流并将视频流保存到MP4文件. 本文亦适用于从USB Camera 获取视频流并将视频流转发到rtmp服务的案例,二者基本的原理 ...
- FFmpeg获取DirectShow设备数据(摄像头,录屏)
这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘.本文所述的方法主要是对应Windows平台的. 1. 列设备 ffmpeg -list_devic ...
- 【转】FFmpeg获取DirectShow设备数据(摄像头,录屏)
这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘.本文所述的方法主要是对应Windows平台的. 1. 列设备 ffmpeg -list_devic ...
- H264编码 封装成MP4格式 视频流 RTP封包
H264编码 封装成MP4格式 视频流 RTP封包 分类: 多媒体编程 2013-02-20 21:31 3067人阅读 ...
- ffmpeg 从视频流中抓取图片
从视频中不断抓取图片的基本流程:打开视频流地址->获取视频流packt->解码成图片帧->输出图片 一.初始化Ffmpeg void ffmpegInit(){ av_registe ...
- 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放
这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...
随机推荐
- win10 U盘安装ubuntu16.04双系统
所需工具U盘,软件ultralISO.ubuntu16.04,自己使用的系统是win10 一.制作U盘启动盘 打开ultraISO软件 2 2 3 4 开始写入—>直到完成大概五分的样子 二. ...
- 把git上的larave项目通过SourceTree安装上再通过composer安装依赖库
1.项目地址克隆 https://gitee.com/fps2tao/laravel5.5-alitaobao.git 通过SourceTree工具下载到本地 2.在命令行方式打开项目地址安装依赖库( ...
- unity 在脚本B中调用脚本A的函数
一,在脚本B中调用脚本A的函数. 脚本A: //myFuncs.cs using UnityEngine;using System.Collections; namespace myFuncs{ ...
- ubuntu下gcc-avr安装
ubuntu下研究arduino时发现,原来可以不用arduino IDE开发,linux下还有gcc-avr直接开发avr系列的控制器. 于是,迫不及待的查看了下相关资料,总结一下安装gcc-avr ...
- Ubuntu和centos下查看包的安装路径
安装包后,如何查看安装的具体路径? Ubuntu下: dpkg -L <包名> CentOS下: rpm -ql <包名> 助记: l为list的首字母. q为query ...
- Java并发和多线程那些事儿
我记得我接触电脑的时候是在小学三年级的时候,那是1995年,那年发布了windows95,但是我学习的时候还是只是dos系统,简单对于文件的一些命令操作还有五笔 在过去的那个年代,电脑都是单CPU,也 ...
- Linux系统中 Sublime Text 中文 GBK 文件乱码问题
Sublime Text 是一个很不错编辑器,具有漂亮的界面和强大的功能.再加上丰富的插件,而且还跨平台,绝对是一款实打实的神器啊! 众所周知,Sublime Text 对中文支持的极差,可以说几乎就 ...
- CString转char * ,string
CString头文件#include <afx.h> string头文件#include <string.h> 1.CString转char * CString cstr; c ...
- PairRDD中算子combineByKey图解
1.combineByKey combine 为结合意思. 作用: 将RDD[(K,V)] => RDD[(K,C)] 表示V的类型可以转成C两者可以不同类型. def combineBy ...
- JS中split用法和数组中元素的删除
JS中split用法 <script language="javascript"> function spli(){ datastr="2,2,3,5,6,6 ...