您的位置:首页 > 移动开发 > Android开发

移植ffmpeg到Android实现多媒体传输

2013-06-25 08:51 477 查看
1.所谓移植,即按照之前的步骤,编译so库。

2.所谓移植之后的使用,由于时间以及偷懒的原因,直接按照前篇的思路,更改ffmpeg的入口main()函数,然后传参调用。

3.其中换过ffmpeg好多版本尝试,最后确定用的0.8.14. 修改源码的入口函数并编译通过。接下来结合JNI对ffmpeg接口的调用,在android平台实现了本地视频往ffserver端传送以及视频转码等功能。

4.主要问题:按照之前的编译ffmpeg方法,在生成的库里面没有开启TCP等通信协议(追踪ffmpeg源码发现下面使用http,tcp等协议与server链接)。所以后来,按照需求修改config.h的宏,开启相关功能。当然编译的过程可能会出现若干问题,可以参考error相关添加与修改。

5.最终,开启server并顺利通信。 相关代码,参考前面更改接口调用文章。

标注:

config.h相关宏的开启与关闭可能是编译中出现问题的解决办法;

在libavformat/Android.mk下添加相关必要的源码编译。

==========================================================

一. ffmpeg 源码, 修改main() 入口。参考第一篇文章编译ffmpeg的方法修改与添加。

jni/ffmpeg/Android.mk 大致如下:

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_WHOLE_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale libavfilter libavdevice

LOCAL_MODULE := ffmpeg

LOCAL_SRC_FILES += cmdutils.c cmdutils.h ffmpeg.c cmdutils_common_opts.h

LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))

--------------------
为了开启TCP/HTTP协议,修改config.h 中有关HTTP/TCP相关宏定义。

由于开启了上述协议需要在libavformat/Android.mk 中source file 加入相关源码文件,大致如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_SRC_FILES += http.c http.h tcp.c udp.c httpauth.c httpauth.h

LOCAL_C_INCLUDES := \

$(LOCAL_PATH) \

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex

LOCAL_LDLIBS := -lz

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

------------------

接下来按照 ffmpeg 中hello-jni demo 示例
文章思路。编写jni接口调用ffmpeg库中的接口并传入参数实现相关功能。

基本代码参考上篇更改接口调用文章。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: