ffmpeg 自定义数据来源, 可以是文件,可以是内存,可以是网络, 爱咋的咋的...
2019独角兽企业重金招聘Python工程师标准>>>
// ffmpeg_custom_context.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
extern "C"
{
#include <libavformat/avformat.h>
};#pragma comment(lib, "avformat.lib")int ReadFunc(void* ptr, uint8_t* buf, int buf_size)
{FILE* fp = (FILE*)ptr;size_t size = fread(buf, 1, buf_size, fp);int ret = size;return ret;
} //这个函数你可以自由发挥。一定要自由发挥。我没有网络流就从文件读了, 一般来说这里不能返回-1 或者0, 否则ffmpeg认为结束、或失败了。 你不想读文件,就直接从内存拷一段数据给buf即可。 接受的网络流、底层上采集卡上来的流都可以在这里,,,,
//一定要注意这个函数,ffmpeg的实现就是一个坑,一不小心就中招了。int64_t seek_func(void *opaque, int64_t offset, int whence)
{int64_t ret;FILE *fp = (FILE*)opaque;if (whence == AVSEEK_SIZE) {return -1;}fseek(fp, offset, whence);return ftell(fp);
}int _tmain(int argc, _TCHAR* argv[])
{av_register_all();int ret = 0;FILE* fp = fopen("./BoyGirls.mp4", "rb");int nBufferSize = 1024 * 1024;unsigned char* pBuffer = new unsigned char[nBufferSize];AVFormatContext* pFormatCtx = NULL;AVInputFormat *piFmt = NULL;AVCodecContext *vcodecCtx = NULL, *acodecCtx = NULL;AVCodec *vdec = NULL, *adec = NULL;int ai = -1, vi = -1;
// Allocate the AVIOContext:AVIOContext* pIOCtx = avio_alloc_context(pBuffer, nBufferSize,0,fp,ReadFunc,0,seek_func);
//step2:探测流格式 ret = av_probe_input_buffer(pIOCtx, &piFmt, "", NULL, 0, 0);if (ret < 0) {fprintf(stderr, "probe failed!\n");goto quit;}else {fprintf(stdout, "probe success!\n");fprintf(stdout, "format: %s[%s]\n", piFmt->name, piFmt->long_name);}
// Allocate the AVFormatContext:pFormatCtx = avformat_alloc_context();
// Set the IOContext:pFormatCtx->pb = pIOCtx;pFormatCtx->flags = AVFMT_FLAG_CUSTOM_IO;
//step4:打开流 if (avformat_open_input(&pFormatCtx, "", piFmt, NULL) < 0) {fprintf(stderr, "avformat open failed.\n");goto quit;}else {fprintf(stdout, "open stream success!\n");}if (avformat_find_stream_info(pFormatCtx, NULL)<0){printf("av_find_stream_info error \n");goto quit;}
//接下来该做什么??? 喂,你要做什么?
quit:avformat_close_input(&pFormatCtx);delete[]pBuffer;return 0;
}
本来已经有一篇了:http://hi.baidu.com/mingyuejingque/item/34db89a7d16fc9706cd4559d
可是新乞丐王子说版式不方便阅读,特别是在上面url的回帖我已经贴了代码,猥琐的百度默认没打开回帖,,,所以新贴了这篇方便大家。感谢祖国!
转载于:https://my.oschina.net/mingyuejingque/blog/488572
ffmpeg 自定义数据来源, 可以是文件,可以是内存,可以是网络, 爱咋的咋的...相关推荐
- FFMPEG操作流数据-获取aac音频文件
多媒体文件是一个容器,在容器里有很多的流(Stream/Track[翻译:轨]),如视频流.音频流.字幕流等. 常见操作 解复用 获取流(AVStream) 读数据包(AVPacket) 解码/编码( ...
- AutoCAD .Net 在dwg文件中存储自定义数据
问题 我需要在 dwg 文件中存储一些信息,以额外描述图形文件并使它能够和其它软件程序集成. 请问怎样才能在 dwg 文件中写入自定义数据并读取? 回答 你可以使用 Named Object Dict ...
- matlab与quartus的联合数据交换(NCO与文件数据的混频处理)
文章目录 背景 再次认识关于DDS的来源 实际案例 官方资料阅读(NCO IP core) 参数原理 通常的步骤 工程实例 MATLAB生成波形txt文件 IP配置 文件命令语法(官方提示) mode ...
- 基于svg绘制北京地铁图(官网数据来源)
北京地铁图 北京地铁图,基于svg开发,支持PC.移动端多种浏览器. 线上开源地址 https://github.com/StavinLi/beiJingSubway 点个赞吧! 项目介绍 技术点 1 ...
- clair、anchore、trivy开源数据库的数据来源分析
数据来源分析 trivy trivy 分了四个仓库进行维护,分别是 trivy 负责提供cli交互程序 trivy-db 负责将处理好的数据打包成blot格式 vlun-list 负责存放处理好的原始 ...
- 【论文阅读】You Are What You Do:通过数据来源分析寻找隐蔽的恶意软件
You Are What You Do: Hunting Stealthy Malware via Data Provenance Analysis NDSS-2020 伊利诺伊大学香槟分校.德克萨斯 ...
- H264码流插入自定义数据(SEI字段)
文章目录 前言 一.H264码流结构 1. 文字说明 2. 码流格式图解 二.自定义数据封装以及H264码流插入 1.将自定义数据封装成SEI字段通用格式即可插入H264码流中 2.编程逻辑 三.附上 ...
- phpwind 房产 数据来源经纪人数据 增加个人中介公司调用分类
phpwind 房产 数据来源经纪人数据 增加个人中介公司调用分类 如图下所示 台州住房网 个人调用继承原来功能不变. 增加中介公司类别功能如下 所有调用字段 agencyid#4 name#路桥 ...
- Xamarin.Forms中为WebView指定数据来源Source
Xamarin.Forms中为WebView指定数据来源Source 网页视图WebView用来显示HTML和网页形式内容.使用这种方式,可以借助网页形式进行界面设计,并利于更新和维护.WebView ...
最新文章
- 使用runtime让button传递多个参数
- mysql预处理 更新_MySQL 预处理方法更新删除-2018年04月27日00时59分
- 使用 collections 来创建类似元组对象
- mysql 表查询注意
- 日本公司用人工智能帮人做金融交易
- 张亚勤:从信息化生存到互联网化生存 百度重构互联网安全防护体系
- 基于Away3D实现全景的相机控制器。
- Android Activity Launch Mode 启动模式详解
- 从零开始撸一个Kotlin Demo
- 前端学习(649):编译和解释性语言的区别
- SpringBoot入门之上传文件
- 用变量a给出下面的定义
- map转json,json转对象
- irobot擦地机器人故障_不想跪下擦地板!iRobot新神器擦地机器人能否帮到你?
- 百度地图API 拾取坐标
- 搜狗微信的链接并转换成永久链
- 异度之刃2 任务打杂店的帮手去哪获取纯洁石
- 2022-2028年全球与中国马铃薯淀粉生产线行业发展趋势及竞争策略研究
- (不定期更新)《虚拟现实应用技术》(Yanlz+Unity+XR+VR+AR+MR+AVE+Oculus+SteamVR+眩晕症+5G+云计算+边缘计算+人机交互+立钻哥哥+==)
- 卡车智能驾驶进入“后法规”时代
热门文章
- 权限系统该如何设计?
- Postgres初级教程 insert语句
- u盘文件被隐藏了怎么显示出来?数据丢失也能找回
- Windows游戏设计(二)- 打砖块游戏 - 使用Win32 SDK
- 霍格沃兹全国测试开发火焰杯专业人才大赛
- 小米隐私合规检测之违规收集IP地址
- 美的NLP算法实习生面试
- 账户为计算机用户或计算机提供安全凭证,我的电脑里有2个Administrator文件夹,肿么删除其中多余的一个呢?...
- 三菱Q系列plc,11轴标准程序,包含轴回零,相对定位,绝对定位,程序有两轴直线插补
- 又发现支付宝和淘宝的设计漏洞