android 边录制视频边添加OSD
来源:互联网 发布:庞氏骗局 知乎 编辑:程序博客网 时间:2024/05/22 15:36
实现方案:android camera + ffmpeg(filter) + mediacodec
本文记录下自己实现过程中遇到的问题:
1.编译库
1) filter的drawtext函数需要freetype 库的支持。
在编译freetype库时,我本来想把freetype编译成静态库,但是中间遇到了很多问题,浪费了n多时间,
最后还是编成了动态库,so库编译比较顺利,在Android.mk文件添加src file时可以参考freetype/docs/INSTALL.ANY中的说明。
2)最后,在编译ffmpeg时,需要打开下面2个选项:
--enable-libfreetype \
--enable-avfilter \
ndk-build时,提示ft2build.h找不到,把freetype/include下的头文件拷贝到libavfilter, 解决此问题
2.代码编写
我参考了ffmpeg/doc/examples/filtering_video.c的实现,在此基础上进行修改,遇到的问题及解决办法:
1) avfilter_graph_parse_ptr(filter_graph, filters_descr,&inputs, &outputs, NULL)); 中的filters_descr 一定要合法,可参考网上其它或ffmpeg-filters.html;
2) av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts,AV_PIX_FMT_YUV420P, AV_OPT_SEARCH_CHILDREN);
pix_fmts 和 参数 AV_PIX_FMT_YUV420P 这2个输入参数一定要与android端视频帧格式一致,我camera的previewformat 设置的是ImageFormat.YV12,
与此对应的就是AV_PIX_FMT_YUV420P。
3) 从av_buffersink_get_frame(buffersink_ctx, filt_frame); 获取到输出filt_frame之后,如何保存到char数组中? 在此函数之前通过 avpicture_fill将filt_frame 中data指向char数组行不通
(猜想是在处理过程中 frame中的data指向了新的地址)。最后只能通过直接把frame->data 直接赋值到char 数组解决了
本文记录下自己实现过程中遇到的问题:
1.编译库
1) filter的drawtext函数需要freetype 库的支持。
在编译freetype库时,我本来想把freetype编译成静态库,但是中间遇到了很多问题,浪费了n多时间,
最后还是编成了动态库,so库编译比较顺利,在Android.mk文件添加src file时可以参考freetype/docs/INSTALL.ANY中的说明。
2)最后,在编译ffmpeg时,需要打开下面2个选项:
--enable-libfreetype \
--enable-avfilter \
ndk-build时,提示ft2build.h找不到,把freetype/include下的头文件拷贝到libavfilter, 解决此问题
2.代码编写
我参考了ffmpeg/doc/examples/filtering_video.c的实现,在此基础上进行修改,遇到的问题及解决办法:
1) avfilter_graph_parse_ptr(filter_graph, filters_descr,&inputs, &outputs, NULL)); 中的filters_descr 一定要合法,可参考网上其它或ffmpeg-filters.html;
2) av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts,AV_PIX_FMT_YUV420P, AV_OPT_SEARCH_CHILDREN);
pix_fmts 和 参数 AV_PIX_FMT_YUV420P 这2个输入参数一定要与android端视频帧格式一致,我camera的previewformat 设置的是ImageFormat.YV12,
与此对应的就是AV_PIX_FMT_YUV420P。
3) 从av_buffersink_get_frame(buffersink_ctx, filt_frame); 获取到输出filt_frame之后,如何保存到char数组中? 在此函数之前通过 avpicture_fill将filt_frame 中data指向char数组行不通
(猜想是在处理过程中 frame中的data指向了新的地址)。最后只能通过直接把frame->data 直接赋值到char 数组解决了
阅读全文
0 0
- android 边录制视频边添加OSD
- Android录制视频添加水印
- Android 录制视频添加时间水印
- android视频录制(调用系统视频录制)
- Android OSD层 “挖洞”显示视频层
- Android 视频录制
- android视频录制
- android 音视频录制
- android视频录制例子
- Android录制视频(五)
- Android录制视频(四)
- Android录制视频(三)
- Android录制视频(二)
- Android录制视频(一)
- Android视频录制
- VLC Android录制视频
- android-音视频录制
- Android MediaRecord视频录制
- Reactor线程模型
- 整合ssm
- 01背包 hdu2546饭卡
- 图论 -- 最短路径 dijkstra 算法模版 hdu 1874
- javascript Date format(js日期格式化)
- android 边录制视频边添加OSD
- svn项目被锁住了,不能操作怎么办
- 【CodeForces】598B
- HTML5-楼层商品-购物车-放大镜
- 【持续集成框架Jenkins】环境搭建(win10)
- kafka-manager安装
- 算法1.2下压堆栈(链表表示)(algs4)
- saltstatck简单配置和使用
- Centos6.5 python 2.6.6升级2.7