ffmpeg4.1 压缩图片为视频

int save_jpeg(char* filepath, void* vp, void* service) {Rtmp_tool *rtmp_tool = (Rtmp_tool *)vp;DemoDevice *pDev = (DemoDevice *)service;av_log_set_level(AV_LOG_WARNING);AVCodecContext *c = rtmp_tool->c;AVPacket avpkt;//AVFrame *m_pRGBFrame = rtmp_tool->m_pRGBFrame;//AVFrame *m_pYUVFrame = rtmp_tool->m_pYUVFrame;AVPixelFormat pixFormat = AV_PIX_FMT_YUV420P;AVFormatContext *avFormatCtx = NULL;AVCodecContext *avCodecCtx = NULL;AVFrame *pFrameYUV = NULL;AVCodec *avCodec = NULL;AVPacket packet;if (avformat_open_input(&avFormatCtx, filepath, NULL, NULL) != 0){printf("phase_1,couldn't open input file\n");return -1;}if (avformat_find_stream_info(avFormatCtx, NULL) < 0){printf("phase_1,stream_info error\n");return -1;}int videoStream =0;avCodecCtx = avcodec_alloc_context3(NULL);avcodec_parameters_to_context(avCodecCtx, avFormatCtx->streams[videoStream]->codecpar);avCodec = avcodec_find_decoder(avCodecCtx->codec_id);if (avCodec == NULL){printf("phase_1,cant find decoder\n");return -1;}if (avcodec_open2(avCodecCtx, avCodec, NULL) < 0){printf("phase_1,cant open decoder!\n");return -1;}pFrameYUV = av_frame_alloc();if ( pFrameYUV == NULL){printf("phase_1,cant open a frame to store data\n");return -1;}int frameFinish = 0;int decLen = 0;while (av_read_frame(avFormatCtx, &packet) >= 0){if (packet.stream_index == videoStream){if (avcodec_send_packet(avCodecCtx, &packet) != 0) {cout << "avcodec_send_packet错误" << endl;break;}while (avcodec_receive_frame(avCodecCtx, pFrameYUV) == 0) {printf("avcodec_receive_frame for encoding\n");avcodec_flush_buffers(avCodecCtx);av_init_packet(&avpkt);// av_packet_alloc();int ret = avcodec_send_frame(c, pFrameYUV);pFrameYUV->pts++;if (ret < 0){printf("Error sending a frame for encoding\n");exit(1);}while (ret >= 0){ret = avcodec_receive_packet(c, &avpkt);if (ret != 0) {if (ret == -11 || ret == AVERROR(EAGAIN)) {//-11printf("avcodec_receive_packet AVERROR(EAGAIN) %d\n",AVERROR(EAGAIN));}else if (ret == AVERROR(EINVAL)) {//-22printf("avcodec_receive_packet AVERROR(EINVAL)\n");}else {printf("avcodec_receive_packet error %d\n", ret);}av_packet_unref(&avpkt);break;}//printf("Write packet %3(size=%5d)\n", avpkt->pts, avpkt->size);if (!pDev->m_token.empty()) {InfoFrame data_send;data_send.video = CODEC_H264;struct timeval tv;gettimeofday(&tv, NULL);if (pDev->stream_open) {pDev->send_data(avpkt.data, avpkt.size, tv.tv_sec, tv.tv_usec / 1000, data_send);}//fwrite(avpkt->data, 1, avpkt->size, rtmp_tool->f);}av_packet_unref(&avpkt);}//packet.data += decLen;//packet.size -= decLen;av_packet_unref(&packet);}}}avCodec->close(avCodecCtx);printf("2222\n");avcodec_close(avCodecCtx);printf("555\n");avcodec_free_context(&avCodecCtx);printf("66666\n");avformat_close_input(&avFormatCtx);printf("7777\n");av_frame_free(&pFrameYUV);printf("222\n");av_packet_unref(&packet);printf("send ok\n");return 0;
}

ffmpeg4 读取图片编码相关推荐

  1. java exif 语言编码_Java读取图片EXIF信息的代码

    Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...

  2. ttf,woff2字体转化为png图片,python读取图片

    20210326 乱码转换的时候 是同一套unicode编码 但是在不同的字体库中对应的字不同 20210324 https://jingyan.baidu.com/article/e73e26c0c ...

  3. 图片的另一种展现—将后台图片编码直接展现为图片

    1.应用场景 开发过程中,遇到这样的需求:需要将服务器上的图片展现在页面上,但是图片所在服务器不是对外的,图片所在服务器与应用服务器也不在同一台机器上,这时候就需要在开发中先将图片读出来,返回给应用服 ...

  4. 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )

    文章目录 一.测试 WebP 图片解码速度 二.测试 WebP 图片编码速度 三.参考资料 测试结果 : WebP 格式图片 , 解码快 , 编码慢 , 占用空间小 ; 在解码速度上 , WebP 格 ...

  5. java读取图片缩略方法_java 图片缩略图的两种方法

    最近网上看到两种不同的java图片缩略图的绘制方案 第一种,使用Graphics().drawImage按照一定的比例重新绘制图像. Java代码 package com.image.suoluetu ...

  6. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的测试,图像格式png,jpg, gif等等测试均O ...

  7. 某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置!

    1. python读取图片exif属性中的GPS信息 智能手机或平板如果在拍照时开启定位服务,照片中就会记录拍照位置信息和拍摄时间.如果将原始照片直接发送发布到网上,无意中就泄漏了自己的位置信息,有恶 ...

  8. canvas读取图片,输入文字,调整文字属性,拖拽文字位置,并保存图片

    不是专门做前端的,代码写的不太好,权当抛砖引玉. 整体思路: 共有5层,除了背景颜色的div没什么用之外,canvas1用来读取图片作为背景,canvas2把文字展示出来,并记录拖拽文字的位置,can ...

  9. python批量读取图片gps位置_某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置!...

    原标题:某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置! 1. python读取图片exif属性中的GPS信息 智能手机或平板如果在拍照时开启定位服务,照片中就会记录拍照位置信息和 ...

最新文章

  1. 前微软副总裁姚麒回归小冰,任首席技术官
  2. 〖Windows〗Linux的Qt程序源码转换至Windows平台运行,编码的解决
  3. Java多线程(3)--线程的生命周期
  4. Spark 键值对RDD操作
  5. C++之强制转换const_cast、static_cast、dynamic_cast、reinterpret_cast 、dynamic_cast
  6. linux性能评估-内存基础理解篇
  7. [论文翻译] iCaRL: Incremental Classifier and Representation Learning
  8. 如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法
  9. 管理信息系统开发项目管理(VIVID)
  10. 练习-Java类和对象之包的定义(17)
  11. 学习FPGA绝佳网站推荐
  12. endNote操作教程-2-文献导入到endNote
  13. 卫哲:阿里的中供铁军为什么能培养出滴滴程维?
  14. 自编码器(autoencoder)了解一下
  15. 用电脑无线投屏到电视屏幕的连接方法
  16. 淘宝api接口大全(参数返回值说明)
  17. 浏览器开发者工具修改html后执行,谷歌Chrome浏览器开发者工具教程—JS调试篇
  18. 你的自杀指数又是多少?
  19. Vue国际区号组件开发(目前已经发布到npm)
  20. epub格式的电纸书

热门文章

  1. Linux C编程--操作文件结束和错误的判断方法(函数)
  2. html根据文档定位,html文档中的location对象属性理解及常见的用法
  3. golang exec cmd pipeline zombile 进程
  4. tensowflow 训练 远程提交_深度解析AutoML工具——NNI:带上超参一起训练
  5. 微型计算机应用重点,微型计算机原理以及的应用考试重点.doc
  6. php导出页面word,php导出生成word的方法_PHP
  7. mysql 客户端 交叉编译_移植mysql到嵌入式ARM平台
  8. c语言输入不为空时循环,scanf循环输入的时候第二个数据输入有问题,相当于是多出来的...
  9. props写法_好程序员web前端培训React中事件的写法总结
  10. html中如何消除左边界,元素的局中对齐问题,CSS盒属性使用技巧,前端开发必备...