PJSIP增加保存AVI文件功能
2016-05-21 21:07
501 查看
PJSIP库没有保存视频文件的功能。保存为AVI文件是因为图像是RGB格式的,有一个avilib类可以写AVI文件。
PJSIP库中的ffmpeg解码后,格式是I420,即YUV420P。宽高是720*480。利用ffmpeg的sws_scale可将YUV转为RGB格式。
注意格式是PIX_FMT_BGR24,否则颜色不对,红蓝反了。
图像是颠倒的,需要进行转换。
具体代码如下:
使用前调用avi_create()函数。
PJSIP库中的ffmpeg解码后,格式是I420,即YUV420P。宽高是720*480。利用ffmpeg的sws_scale可将YUV转为RGB格式。
注意格式是PIX_FMT_BGR24,否则颜色不对,红蓝反了。
图像是颠倒的,需要进行转换。
具体代码如下:
使用前调用avi_create()函数。
在ffmpeg_codec_decode_whole(…)中 output->type = PJMEDIA_FRAME_TYPE_VIDEO; output->size = vafp->framebytes;后添加 if(g_nFlag==1) { avframe.data[0]=avframe.data[0]+avframe.linesize[0]*(g_nheight-1); avframe.linesize[0]=avframe.linesize[0]*-1; avframe.data[1]=avframe.data[1]+avframe.linesize[1]*(g_nheight/2-1); avframe.linesize[1]=avframe.linesize[1]*-1; avframe.data[2]=avframe.data[2]+avframe.linesize[2]*(g_nheight/2-1); avframe.linesize[2]=avframe.linesize[2]*-1; sws_scale(g_sws_ctx, avframe.data, avframe.linesize, 0, g_nheight, g_dst_data, g_dst_linesize); if(g_ntotalindex<50) //前面的帧是粉红色,过滤掉 { ++g_ntotalindex; } else if(g_ntotalindex>=50) { g_ntotalindex++; AVI_write_frame(g_avi, g_dst_data[0], g_nwidth*g_nheight*3, g_navi++); } } PJ_DEF(pj_status_t) yuv2rgb_init() { int nLen; g_sws_ctx = sws_getContext(g_nwidth, g_nheight, AV_PIX_FMT_YUV420P,g_nwidth, g_nheight, PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL); if (g_sws_ctx == NULL) return PJ_ENOTSUP; nLen = av_image_alloc(g_dst_data, g_dst_linesize, g_nwidth, g_nheight, PIX_FMT_BGR24, 1); if(nLen<0) { return PJ_FALSE; } return PJ_TRUE; } PJ_DEF(pj_status_t) avi_create( const char *filename) { yuv2rgb_init(); g_avi=AVI_open_output_file(filename); AVI_set_video(g_avi, g_nwidth, g_nheight, 15, "RGB"); return PJ_TRUE; }
相关文章推荐
- js处理金额
- Javascript 理解 js闭包 应用
- Java-JSSE-SSL/TLS编程代码实例-双向认证
- 纯JS实现slideToggle动画,慢慢下拉打开
- js 案例
- 17、对于JavaScript中匿名函数的理解
- JavaScript 函数
- JS学习15(HTML5脚本编程)
- 16、在JavaScript中,命名的一些规范
- 使用highcharts完成实时信息显示的动态波动图表
- JSP学习笔记(2)-JSP语法
- JS 闭包类
- JS原生回到顶部效果
- fullpage.js---全屏滚动插件
- JSP中的9个内置对象
- js代码调用c++代码的测试
- JSP03
- 深入解析JavaScript中的立即执行函数
- JS数组sort比较函数
- 各种JS模板引擎对比数据(高性能JavaScript模板引擎)