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

#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。打开live\win32config文件,修改如下


TOOLS32 = c:\Program Files\DevStudio\Vc


TOOLS32 =  E:\Program   Files\Microsoft Visual Studio 10.0\VC


将TOOLS32修改为你的VS2010路径


LINK_OPTS_0   =        $(linkdebug) msvcirt.lib


LINK_OPTS_0   =   $(linkdebug)  msvcrt.lib


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

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


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


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

3  建立makefile

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

4  建立build.bat命令

  新建live\complie.bat,并添加内容如下:

call "E:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.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

时间: 2024-11-01 03:38:02

开发ffmpeg/live555常见问题错误及解决方法的相关文章

微信小程序在开发中遇到的错误与解决方法

1. 这种错误多半是该js文件中没有Page这个方法,就算是空的js也必须要把Page({ })写上去   √ 2. 这种错误多半是该json文件没有内容,所以必须要加上{ },就算是空内容也要加上{ }.√ 补一句:小程序里json文件中不允许有注释不然会报错. 3. 这个问题我不知道怎么解决了.iconClass在当前页面的js中的data里是一个数组,我只想让它使用第一个属性,但是这样不行.未解决 4. 这个错误就很明显了.小程序中的背景图片不能使用本地的路径,要么使用在服务器上的图片路径

执行游戏时出现0xc000007b错误的解决方法

如图,这个错误使无数玩家烦恼. 出现这个错误,可能是硬件的问题,也可能是软件的问题.可是,因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件解决此问题,这也是大家最关心的. 大致介绍一下这个错误是怎样发生的.这个错误的本意是提示内存错误,可是通常情况下并非内存存在问题,而是因为软件的问题产生了这个错误.到底是什么软件的问题呢?答案是DirectX,而且多数情况下是DirectX 9.0的问题. 或许大家会问了:我玩的游戏都有DirextX 11

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理.本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭.这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类

iOS开发-No matching provisioning profiles found解决方法

今天真机调试的时候莫名其妙遇到了这样的一个问题: This product type must be built using a provisioning profile, however no provisioning profile matching both the identity "iPhone Developer" and the bundle identifier..... 具体如下图所示: 十分蛋疼, 发现不管是从网上下的demo, 还是自己的过程.凡事真机测试的时候都

java开发中遇到的问题及解决方法(持续更新)

摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不想动用Eclipse大家伙,只能自己动手编写脚本进行Java代码的编译和运行,期间遇到的一些问题,记录下来供自己和大家参考.1)软件包不存在/软件包 javax.jms 不存在    这是由于javac编译时找不到javax.jms所在的软件包,因此将

SQLSERVER 备份还原常见错误以及解决方法

SQLSERVER 备份还原常见错误以及解决方法      个人在做测试的时候发现的常见问题,和一些解决方案,记录下来,以免遗忘! 错误一 解决方法: 先分离源数据库,然后你可以使用 move 属性 或者直接添加 REPLACE

fedora25 安装virtualbox5.1 出现提示Kernel driver not installed (rc=-1908) 错误的解决方法

fedora25 安装virtualbox5.1 出现提示Kernel driver not installed (rc=-1908) 错误的解决方法: $ sudo /usr/lib/virtualbox/vboxdrv.sh setup        vboxdrv.sh: Building VirtualBox kernel modules.             vboxdrv.sh: Starting VirtualBox services.

Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法

Windows 7 64bit上安装Oracle Database 12c,出现以下错误: 解决方法: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER  启动 第二步:控制面板>所有控制面板项>管理工具>计算机管理>系统工具>共享文件夹>共享   右键单击“共享”>新建共享> 点击“下一步”>   单击“浏览”> 选择"本地磁盘(C:)">确定   单击“下一步”:     单击“

飞鸽传书 bind() error=10048错误的解决方法

提示  bind() 错误=10048 原因:其他程序占用飞鸽的 2425 端口 比如:飞秋也是使用2425端口 解决:用netstat命令查看是哪个进程占用了该端口 格式:netstat -ano | find "2425" 结果:  UDP    0.0.0.0:2425     *:*        1716 最后的1716就是占用2425进程的进程ID,看看是什么,可以结束的直接结束该进程,再打开飞鸽就可以了. 关于netstat命令可以输入命令 netstat /? 查看更多