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

本文介绍FFmpeg在Android上的移植过程及应用实践,重点解决了编译时未开启TCP等通信协议的问题,并通过修改config.h及添加相关源码实现视频传输与转码等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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库中的接口并传入参数实现相关功能。

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值