开发ffmpeg/live555常见问题错误及解决方法

摘要:
事实证明,为了让pkg-config获得这些信息,库提供商需要提供.pc文件,该文件存储一些头文件和库地址。这些默认情况下,pc文件存储在/usr/share/pkgconfig中。如果更改的存储路径。pc,您必须让计算机知道,因此您需要修改PKG_CONFIG_PATH假设我的PC文件位于/usr/local/lib/pkgconfig中。我需要进行以下修改:exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG _PATHlive555在Windows环境中编译vs2010:Ⅲ编译步骤方法10概述:使用genWindowsMakefiles生成VS可用makefile1。cmd以修改win32config。
#include <iostream>using namespace std;extern "C" {#include <libavcodec/avcodec.h>    // required headers#include <libavformat/avformat.h>}int main(int argc, char**argv) {    av_register_all();             // offending library call    return 0;}



ffmpeg 默认是用C文件来编译的,如果某个CPP文件想引用ffmpeg中的某些函数或者头文件,有可能出现

‘UINT64_C’ was not declared in this scope的错误

情形大概如下

The same issue i'm getting here when compiling chromium with ffmpeg from svn:

In file included from /usr/include/libavutil/avutil.h:81:0,

from /usr/include/libavcodec/avcodec.h:30,                

 from out/Release/obj.target/geni/ffmpeg_stubs.cc:16:

/usr/include/libavutil/common.h: In function 'int32_t av_clipl_int32(int64_t)':

/usr/include/libavutil/common.h:154:47: error: 'UINT64_C' was not declared in this scope

make: *** [out/Release/obj.target/geni/ffmpeg_stubs.o] Error 1

可以 在cpp文件中加入

extern "C"{

#ifdef __cplusplus
 #define __STDC_CONSTANT_MACROS
 #ifdef _STDINT_H
  #undef _STDINT_H
 #endif
 # include <stdint.h>
#endif

}

来解决

 如果在android下用编译。在Android.mk加入

LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS即可

	#ifdef __cplusplus	extern "C" {	#endif		void AfterSessionDone();		void openURL(UsageEnvironment& env, char const* progName, char const* rtspURL,Authenticator *authDB,const int Channel);		char* h264_decode_buf_prepare(char *sps,int sps_len,char* pps,int pps_len,char* buf_in, char* buf_pre_for_h264_decode,int framesize,const int Channel);	#ifdef __cplusplus	}	#endif



编译为动态库时的问题:

/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet' can not be used when making a shared object; recompile with -fPIC


修改方法:

./configure --enable-pic && make

如果使用的是虚拟机进行开发live555.需要加入路由表:

route add default gw xxx.xxx.xxx.xxx eth0

编译ffmpeg后,直接编译示例不能通过显示库不能找到问题解决。

原来,为了让pkg-config可以得到这些信息,要求库的提供者,提供一个.pc文件,.pc文件里面存放的是一些头文件及库的地址。这些.pc文件默认放在/usr/share/pkgconfig里面,如果你改变了.pc的存放路径,必须要让计算机知道,所以需要修改 PKG_CONFIG_PATH 。
假设我的.pc文件放到了/usr/local/lib/pkgconfig下,我需要做如下修改:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

live555在windows环境编译vs2010:

Ⅲ 编译步骤

方法一(Win7下命令方式)

0  综述:利用genWindowsMakefiles.cmd生成VS可用的makefile

1  修改win32config。打开livewin32config文件,修改如下

TOOLS32 = c:Program FilesDevStudioVc

TOOLS32 =  E:Program   FilesMicrosoft Visual Studio 10.0VC

将TOOLS32修改为你的VS2010路径

LINK_OPTS_0   =        $(linkdebug) msvcirt.lib

LINK_OPTS_0   =   $(linkdebug)  msvcrt.lib

编译器索要的LINK运行库不同,原本以为可以改为msvcrt100.lib,但没找着

2  新增Makefile设定。打开livegroupsockMakefile.head,修改如下

INCLUDES =   -Iinclude -I../UsageEnvironment/include

INCLUDES =   -Iinclude -I../UsageEnvironment/include   -DNO_STRSTREAM

3  建立makefile

  方法:运行livegenWindowsMakefiles.cmd,生成VS能够编译的*.mak文件

4  建立build.bat命令

  新建livecomplie.bat,并添加内容如下:

复制代码
call "E:Program FilesMicrosoft Visual Studio 10.0VCvcvarsall.bat"cd liveMedianmake /B -f liveMedia.makcd ../groupsocknmake /B -f groupsock.makcd ../UsageEnvironmentnmake /B -f UsageEnvironment.makcd ../BasicUsageEnvironmentnmake /B -f BasicUsageEnvironment.makcd ../testProgsnmake /B -f testProgs.makcd ../mediaServernmake /B -f mediaServer.mak
复制代码

5  开始编译:(命令行下)执行complie.bat

参考地址:http://www.cnblogs.com/skyseraph/archive/2012/04/11/2442840.html

参考文章:

linux获取本机IP地址问题(live555)

http://blog.csdn.net/onelight1997/article/details/7528935

live555虚拟机下不能获取数据问题:

http://blog.csdn.net/wesleyluo/article/details/6204635

http://blog.csdn.net/liushu1231/article/details/9203239

识别I帧P帧B帧。

http://blog.csdn.net/linzhiji/article/details/5393647

解码流程经典教程:

http://www.360doc.com/content/11/1117/09/8050095_165108638.shtml

ffmpeg时间戳问题汇总

http://www.cnblogs.com/loveclover/archive/2011/03/23/1993065.html

ffmpeg开发SDK介绍

http://blog.sina.com.cn/s/blog_62a8419a01016exv.html

含有B帧时的疑惑

http://bbs.csdn.net/topics/390692774

100行代码实现最简单的基于FFMPEG+SDL的视频播放器

http://blog.csdn.net/leixiaohua1020/article/details/8652605

ffmpeg解码花屏,码流丢失问题

http://bbs.rosoo.net/thread-14856-1-1.html

FFMpeg中的函数

http://blog.csdn.net/howema/article/details/6065441

FFMPEG重要学习官方资料:

http://ffmpeg.org/faq.html

免责声明:文章转载自《开发ffmpeg/live555常见问题错误及解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VS快捷键小收集DLink DES1226G 一款不错的中端交换机下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx + ffmpeg

第一种方案:ffmpeg+nginx 新的ffmpeg已经支持HLS。(本人也参与了代码供献,给自己做个广告:)) 点播: 生成hls分片: ffmpeg -i <媒体文件> -c:v libx264 -c:a aac -f hls /usr/local/nginx/html/test.m3u8 直播: ffmpeg -i udp://@:12...

FFMPEG 常用命令行

目录 1. 分离音视频 2. 解复用 3. 视频转码 4. 视频封装 5. 视频剪切 6. 视频录制 7.叠加水印 8.将MP3转换为PCM数据 9. 推送RTP流、接收RTP流并存为ts文件 10. ffmpeg 编码 11. ffmpeg 解码 12. 截取 YUV 13. 压缩分辨率 14. ffplay 播放YUV 15. ffplay 播放...

【转】FFmpeg采集设备

ffmpeg在linux下支持的采集设备的种类比较多。 在操作设备之前,我们可以查看当前系统可以支持的操作设备: ffmpeg -hide_banner -devices Devices: D. = Demuxing supported //输入的设备 .E = Muxing supported //输出的设备 -- DE alsa ALSA audio...

NVIDIA FFmpeg 转码技术分析

NVIDIA FFmpeg 转码技术分析 所有从 Kepler 一代开始的 NVIDIA GPUs 都支持完全加速的硬件视频编码,而从费米一代开始的所有 GPUs 都支持完全加速的硬件视频解码。截至 2019 年 7 月,Kepler、Maxwell、Pascal、Volta 和 Turing 一代 GPUs 支持硬件编码,Fermi、Kepler、Max...

ubuntu上安装ffmpeg

引用:http://thierry-xing.iteye.com/blog/2017864 安装包和主要步骤: 1. 首先安装系统基础环境 RHEL & CentOS 系列:yum install -y automake autoconf libtool gcc gcc-c++ Debian & Ubuntu 系列:apt-get ins...

ffmpeg文档21-分离器

分离器 分离器是使得ffmpeg能从特定类型文件中读取多媒体流的组件元素。 当编译ffmepg时,所有支持的分离器都默认被包含,你可以通过编译配置脚本中的--list-demuxers列出所有支持的分离器。 你也可以通过配置--disable-demuxers禁用所有的分离器,如果要在此基础上允许单独的分离器可以选用--enable-demuxer=DE...