PJSIP增加保存AVI文件功能
来源:互联网 发布:树莓派能做什么 知乎 编辑:程序博客网 时间:2024/06/05 09:15
PJSIP库没有保存视频文件的功能。保存为AVI文件是因为图像是RGB格式的,有一个avilib类可以写AVI文件。
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;}
0 0
- PJSIP增加保存AVI文件功能
- pjsip(2.4.5)增加视频功能
- VC++实现对avi文件的保存
- DirectShow 视频录制保存为avi文件
- 抓取屏幕保存为AVI文件
- 【EMGU】读取视频AVI文件+保存任意帧为图片
- 强烈建议:撰写博客增加自动保存功能
- opencv保存avi视频
- AVI文件和AVI函数
- PJSIP自动语音功能,WAV文件远程播放,可以与TTS整合
- 通过xajax给fckeditor增加自动保存草稿功能
- 通过xajax给fckeditor增加自动保存草稿功能
- 用Opencv保存视频文件avi
- PDF文件如何增加书签功能
- 第3章 增加文件上传功能
- Eclipse 增加打开文件路径功能
- 给ueditor增加删除文件功能
- ios app增加ituns文件共享功能
- flume学习(六):使用hive来分析flume收集的日志数据
- 剑指offer面试题4(java实现)
- 关于sample per symbol(sps)
- 《Android5从入门到精通》
- C++ 中类模板
- PJSIP增加保存AVI文件功能
- JAVA中的“抽象接口”
- VS误删Microsoft Help Viewer 2.0 解决办法
- flume学习(七)、(八):如何使用event header中的key值以及自定义source
- 简单的sql server操作
- java多线程和并发的面试问答
- 顺序表应用4:元素位置互换之逆置算法
- where time to go
- 31. Next Permutation