开发环境介绍

这一次代码环境比较复杂,我使用的分别是VS2017与CygWin编译C文件

项目遇见的问题

1.VS2017中使用av_register_all(),显示4996错误。
2.cygwin环境中av_register_all() 函数已被声明,但是不能通过VS环境中的行为,解决函数已被声明的解决办法

项目源码

/** Copyright (c) 2017 Liming Shao <lmshao@163.com>*/
#define _CRT_SECURE_NO_WARNINGS// //4996  错误警告解决
#pragma  warning(disable:4996)
#pragma comment(lib, "avformat.lib")
//
// linux 下只支持 正斜杠 不支持反斜杠
#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>#include <stdbool.h>int main(int argc, char *argv[])
{av_log_set_level(AV_LOG_INFO);int ret=0;//注册所有编解码char *src = NULL;char *dst = NULL;AVFormatContext *fmt_ctx = NULL;//1. 通过命令行输入名字  params form console ////这里是命令行参数的个数if (argc < 3){av_log(NULL, AV_LOG_ERROR, "the  params should be more than three");return -1;}
//argv 数组是 命令行参数的具体内容src = argv[1];dst = argv[2];if (src == NULL || dst == NULL) {av_log(NULL, AV_LOG_ERROR, "無法打開dir  %s", av_err2str(ret));}ret = avformat_open_input(&fmt_ctx, "./assets/orange.mp4", NULL, NULL);if (ret < 0){//错误信息转换成字符串,如果找不到需要打开文件释放掉,需要使用 goto 语句av_log(NULL, AV_LOG_ERROR, "無法打開dir  %s", av_err2str(ret));return -1;}FILE * dst_id = fopen(dst, "wb");if (dst_id==NULL) {av_log(NULL, AV_LOG_ERROR, "can't open file ");avformat_close_input(&fmt_ctx);return -1;}av_dump_format(fmt_ctx, 0, "./assets/orange.mp4", 0);//2.get steam //ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);if (ret < 0) {av_log(NULL, AV_LOG_ERROR, "can't find best frame ");avformat_close_input(&fmt_ctx);fclose(dst_id);return -1;}AVPacket pkt;av_init_packet(&pkt);int audio_index = ret;int len;while (av_read_frame(fmt_ctx, &pkt) >= 0) {if (pkt.stream_index == audio_index){len = fwrite(pkt.data, 1, pkt.size, dst_id);if (len != pkt.size){av_log(NULL, AV_LOG_WARNING, " warning len  != pkt . size");}}av_packet_unref(&pkt);}//3.write audio data to aac file    avformat_close_input(&fmt_ctx);if (dst_id){fclose(dst_id);}return 0;
}

问题解决

1.av_register_all() C4996 在VS2017中的解决方法:

#define _CRT_SECURE_NO_WARNINGS // //4996 错误警告解决
#pragma warning(disable:4996)

在cygwin 环境下 ,该脚本并不能跑通 。
因为我使用的gcc 编译 所以需要将 gcc 的所有警告祛除。 VS2017方法也好,使用其他方法也好都未能解决。正确解决方式如下

gcc -w -o extraaudio 02-extraaudio.c -L/usr/local/ffmpeg/lib
-lavformat -lavutil -lavcodec

关于gcc 编译警告问题,注解一下:

-w 的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。

-Wall 选项意思是编译后显示所有警告。

-W 选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。

所以需要将gcc 的所有警告问题取消掉。

综述

编译完成后无论是VS2017 与Cygwin 环境下都需要使用命令行的方式进行 输入参数

H:\C4Add\Project2\x64\Debug>Project2.exe ./assets/orange.mp4
./killer.aac

这是我在windows 环境下,执行
还有一点需要注意:av_register_all() 方法,在cygwin环境下,如果不调用,也是可以完全解析出 视频文件的音频信息。这个问题我就不清楚了,如果您清楚,请在评论里备注一下。

gcc 与g++与GCC区别:
这是我找的连接,可以看一下

cygwin环境下ffmpeg中av_register_all()函数,警告过时问题。相关推荐

  1. ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...

    目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...

  2. Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved?

    Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved? 参考文章: (1)Myeclipse开发环境下文件 ...

  3. windows10环境下VMware14中Ubuntu16.04解决如何上网问题

    windows10环境下VMware14中Ubuntu16.04解决如何上网问题 参考文章: (1)windows10环境下VMware14中Ubuntu16.04解决如何上网问题 (2)https: ...

  4. PETSc: Cygwin环境下安装实践

    Cygwin环境下安装实践 方便学习使用PETSc,在Cygwin环境下进行安装实践. 用py进行配置,config/examples下面有多种环境下的py脚本可参考修改 环境 说明 备忘 py配置脚 ...

  5. Windows7环境下Excel2010中图片超链接默认打开程序修改

    网上找的方法,地址忘记了 Windows7环境下Excel2010中图片超链接默认打开程序修改 在Windows7的环境下,打开Excel2010超链接图片,都是默认用IE打开.搜索了所有的中文网络, ...

  6. windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法

    windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 首先看QtCreator 和 MinGW 是不是其中一 ...

  7. ffmpeg中av_image_alloc()函数的用法 以及 另一种同样功能的函数用法

    一.ffmpeg中av_image_alloc()是这样定义的.此函数的功能是按照指定的宽.高.像素格式来分析图像内存. 参数说明: pointers[4]:保存图像通道的地址.如果是RGB,则前三个 ...

  8. windows环境下ffmpeg在cmd中实现wav,mp3分割拆分和与拼接(concat)以及在cmd一次运行多个命令,附ffmpeg安装

    1. ffmpeg在cmd中的实现分割拆分的代码 首先打开cmd: 按win+R,后输入cmd,出现如下窗口 在cmd中定位到待拆分的音频文件的路径 cd+filepath:cd C:\Users\l ...

  9. linux环境下IO的常用函数

    I/O input&output,是一切实现的基础.如果没有i/o,我们在linux上编译的代码将只会在终端出现,将当前进程关闭后,数据无法保留. 标准IO与系统调用(文件)IO的区别 系统I ...

最新文章

  1. 灾难恢复级别_如何实施云计算灾难恢复
  2. dubbo总结——dubbo的使用场景
  3. python3 判断字符串是否包含指定字符
  4. 计算机初中教师资格教案,初中教师资格证教学设计
  5. Python函数中apply、map、applymap的区别
  6. studio 快捷键
  7. 过滤Android工程中多余的资源文件
  8. Git合并最近的commit
  9. QTP的飞机登录描述性编程
  10. 关于CSS的一些基础内容
  11. CeBIT亮点:IBM“绿色地平线” 战斗在雾霾治理的科技前线
  12. 设置Tomcat编码格式
  13. DDPush 任意门消息推送 开源免费实时信息推送服务器
  14. BOOST 升压电路调试笔记
  15. Android sdk 环境变量配置无效
  16. 【JS】1007- JavaScript实现网页截屏的5种方法
  17. 聊聊解决方案架构师的那些事儿 | 文末有赠书
  18. 密码管理神器-1Password,安全与否?
  19. 微软三维人脸重建论文总结——《Accurate 3D Face Reconstruction with Weakly-Supervised Learning》
  20. vue provide / inject 实现组件数据的实时响应

热门文章

  1. 【Nvidia显卡驱动安装失败】
  2. 好和弦-7-和弦配置与和声进行
  3. html5页面特效网,HTML5 Canvas打造超梦幻网页背景特效
  4. 如何更好地利用大数据实现bi商业智能工具?
  5. VBA 快速实现Word三线表
  6. 记录--用JS轻松实现一个录音、录像、录屏的工具库
  7. ubuntu20.04不定时卡死,鼠标和键盘都不可用,且tty无效(rtw_88系列网卡驱动问题)
  8. 低代码开发-牛刀低代码和专业开发云 JNPF 3.4.7新版源码 旗舰版 /微服务、单体 、JAVA 版本
  9. 微信开发者工具突然打不开问题解决
  10. 1.[Andriod]之Andriod布局 VS WinPhone布局