ffmpeg与jrtplib相结合应用

用ffmpeg来进行视频编码,用JRTPLIB库来进行网络传输,来完成实时视频传输

这里修改ffmpeg源码中的例子output_example.c来完成对视频的编码,并创建一个线程来完成网络传输,它们之间通过互斥锁来进行通信。

网络传输my_net_transfer.cpp是基于JRTPLIB库来编写的一个发送程序。

硬件环境ADI公司的DSP芯片是blackfin ADSP-BF537,其软件的编译工具链为bfin-linux-uclibc-xxx。

这里涉及到C与C++的混合编译。my_net_transfer.cpp用bfin-linux-uclibc-g++来编译,output_example.c用bfin-linux-uclibc-gcc来编译(当然也可以用g++来编译,如果用g++来编译,需要将output_example.c中的所有代码用extern "C"{}括起来,来告知编译器这其中的代码请根据C的规则来编译)。最后将output_example.o和my_net_transfer.o以及一些用到的库进行链接,经过我的试验,可以用gcc也可以用g++来链接,我的Makefile是根据ffmpeg中的Makefile来改写的,主要相关内容如下:

INCLUDE =/home/seuic/h_SlaveH_CentOS5H2nd/ip_camera_bf536/jrtplib-3.7.1/install_wangsu/include/jrtplib3
LIB_INC=-L/home/seuic/h_SlaveH_CentOS5H2nd/ip_camera_bf536/jrtplib-3.7.1/install_wangsu/lib
LIB_INC += -L/home/seuic/h_SlaveH_CentOS5H2nd/ip_camera_bf536/trunk/lib/ffmpeg/ffmpeg-svn-9768/install/lib
LIB_NAME = jrtp
INCLD = -I $(INCLUDE)
NETOBJ = my_net_transfer.o
NETSRC = my_net_transfer.cpp
CXX = bfin-linux-uclibc-g++
CFLAGSNET += -g -Wall
EXPOBJ = output_example.o
EXPSRC = output_example.c
MYFLAGS=-I$(BUILD_ROOT) -I$(SRC_PATH) -I$(SRC_PATH)/libavutil \
-I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat -I$(SRC_PATH)/libswscale \
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_ISOC9X_SOURCE -DHAVE_AV_CONFIG_H


output_example$(EXESUF): $(NETOBJ) $(EXPOBJ)
 @echo ""
 @echo ">>>>>>begin to generate output_example<<<<<<"
 $(CC) -o $@ $^ $(LIB_INC) $(EXTRALIBS) -lpthread -l$(LIB_NAME)

 #如果把下面的参数加上去的话,链接就会出错
  #$(CXX) $(LDFLAGS) -o $@ $< $(LIB_INC) $(EXTRALIBS) -lpthread -l$(LIB_NAME)

$(EXPOBJ): $(EXPSRC)
 @echo ""
 @echo ">>>>>>begin to compile output_example.c<<<<<<"
 $(CC) $(MYFLAGS) -c $^

$(NETOBJ): $(NETSRC)
 @echo ""
 @echo ">>>>>>begin to compile my_net_transfer.cpp<<<<<<"
 $(CXX) $(CFLAGSNET) $(INCLD) -c $^

example_clean:
 rm -f output_example.o output_example my_net_transfer.o

  我之前编译了很多次,都因为出现链接错误,提示某某函数未定义什么的。我起初怀疑是自己的C与C++混合编译错误,后来才了解到其实自己的C与C++混合编译没有错误,主要错误是出现在链接的时候的参数不恰当,$(LDFLAGS)该参数是ffmpeg源码里的Makefile文件中的,我之前编译output_example.c(仅作编码未启动网络传输的一个版本)的时候,该参数是可用的,但这次再与网络传输相结合时就挂掉了,死都链接不过去,还会提示"_main"未找到,可查看之前的《C与C++混合编译》博文。一狠心就把这参数干掉了。

  我在链接时添加进去的库有ffmpeg库,jrtplib库以及pthread库。

转载:

点击打开链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值