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库中的接口并传入参数实现相关功能。
基本代码参考上篇更改接口调用文章。