移植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库中的接口并传入参数实现相关功能。
基本代码参考上篇更改接口调用文章。
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库中的接口并传入参数实现相关功能。
基本代码参考上篇更改接口调用文章。
相关文章推荐
- Android移植带有libx264实现的ffmpeg
- Android移植ffmpeg.so实现屏幕录制功能(下)
- FFmpeg全新系列之3.2.2版本于CentOS6.5安装并实现Android移植编译-秒懂-你-逆袭必备
- Android移植ffmpeg.so实现屏幕录制功能(上)
- 基于移动平台的多媒体框架——移植ffmpeg到Android
- NDK移植havlenapetr/FFMpeg |Android平台实现 【Mark一下,目前仅仅测试了一下可行性(可行,但有问题)|接下来就好好研究研究(站下巨人的肩膀么- -)】
- 关于将ffmpeg教程(tutorial01)移植到android ffmpeg上面的实现过程
- Android多媒体开发入门教程一:FFMPEG移植到Android
- Android多媒体学习九:利用MediaRecorder类实现自己的音频录制程序
- ffmpeg移植到android
- FFmpeg的Android平台移植—编译篇
- 利用ffmpeg和SDL实现一个跨android版本的音视频播放器
- 利用ffmpeg和SDL实现一个跨android版本的音视频播放器
- java做服务器,android做客户端,实现数据传输
- FFmpeg Android 移植,改 main 函数JNI调用
- Android多媒体--利用Service实现背景音乐的播放
- 举例实现Android网络数据传输中的Gzip数据压缩
- ffmpeg移植Android 相关问题
- android 移植ffmpeg后so库的使用
- Android IOS WebRTC 音视频开发总结(三一)-- 自定义传输实现一对多