NDK Suerface AudioTrack

【简介】
NDK 的音视频开发中,想调用 AudioTrack或Suerface的类和方法,而它们不属于NDK,而是Android SDK 框架里的部分。解决这个问题有两个方法:

1.在源码环境中将利用到AudioTrack或Suerface的项目作为Android SDK 框架的模块进行编译;

2.利用NDK的交叉编译工具,并且将Android SDK 源码中对应的头文件和库拷贝出来,包含到NDK的项目中


【环境】

android-ndk-r7


【代码】

Android.mk 

LOCAL_PATH:= $(call my-dir)
#-------------------[Rtsp]--------------------
include $(CLEAR_VARS)
LOCAL_MODULE    := libRtsp
LOCAL_SRC_FILES := libRtsp.a

include $(PREBUILT_STATIC_LIBRARY)
#-------------------[NetIQ]--------------------
include $(CLEAR_VARS)
LOCAL_MODULE    := libNetIQ
LOCAL_SRC_FILES := libNetIQ.a

include $(PREBUILT_STATIC_LIBRARY)
#-------------------[Dec264]--------------------
include $(CLEAR_VARS)
LOCAL_MODULE    := libDEC264
LOCAL_SRC_FILES := libDEC264.a

include $(PREBUILT_STATIC_LIBRARY)

#-------------------[tmpc]--------------------
include $(CLEAR_VARS)
LOCAL_MODULE:= libtmpc
LOCAL_SRC_FILES:= \
		tmpc/memory_manager.c \
		tmpc/cc/yuv2rgb16tab.c \
		...


LOCAL_C_INCLUDES := \
		$(LOCAL_PATH)/android-8/include \
		$(LOCAL_PATH)/tmpc/cc \
		...

LOCAL_STATIC_LIBRARIES := \
		libDEC264 \
		libNetIQ \
		libRtsp \

LOCAL_LDLIBS  := -L$(LOCAL_PATH)/local_libs  -llog -lsurfaceflinger_client -lmedia -lutils  -lz      
include $(BUILD_SHARED_LIBRARY)

Application.mk

# Build both ARMv5TE and ARMv7-A machine code.
APP_ABI := armeabi armeabi-v7a
TARGET_PLATFORM := android-8

【步骤】

省略。


【注意】

(1)java层调用库的方法

库命名规则:lib<something>.so
调用:
static {
        System.loadLibrary("FileLoader");
      }


(2)android命名空间

在Android源码中很多CPP的文件都有如下用法:

namespace android {
   class AudioTrack
   {...}
    ....
}

调用AudioTrack:

#include <media/AudioTrack.h>

using namespace android;


...

((AudioTrack*)p_droid->pAudioTrack)->write(p->pBuf, p_droid->nBufSize);

...

(3)使用静态库

如果NDK项目中需使用静态库,直接这样指定是没有效果的:LOCAL_STATIC_LIBRARIES:= libpcap,因为libpcap不是Android NDK默认自带的。

正确的做法是:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := libpcap 
LOCAL_SRC_FILES := libpcap.a

include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE := jnetpcap

LOCAL_SRC_FILES :=\
    jnetpcap.cpp\
    packet_flow.cpp\
    packet_jheader.cpp\
    jnetpcap_pcap_header.cpp\
    nio_jbuffer.cpp\
    winpcap_stat_ex.cpp\
    winpcap_send_queue.cpp\
    winpcap_ext.cpp\
    jnetpcap_ids.cpp\
    jnetpcap_dumper.cpp\
    jnetpcap_utils.cpp\
    util_in_cksum.cpp\
    jnetpcap_beta.cpp\
    nio_jmemory.cpp\
    packet_jsmall_scanner.cpp\
    packet_protocol.cpp\
    nio_jnumber.cpp\
    packet_jheader_scanner.cpp\
    library.cpp\
    packet_jscan.cpp\
    jnetpcap_pcap100.cpp\
    util_checksum.cpp\
    packet_jpacket.cpp\
    winpcap_ids.cpp\
    jnetpcap_bpf.cpp

LOCAL_C_INCLUDES :=\
    /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include\
    /home/sergio/workspace/MyApp/jni/libpcap

LOCAL_STATIC_LIBRARIES := libpcap

include $(BUILD_SHARED_LIBRARY)

转贴:http://blog.csdn.net/stefzeus/article/details/7496810
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值