android使用ffmpeg库

工程目录:



FFmpeg4AndroidActivity.java:

package cn.dennishucd;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class FFmpeg4AndroidActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.main);
		
		TextView tv = (TextView)this.findViewById(R.id.textview_hello);
		
		FFmpegNative ffmpeg = new FFmpegNative();
		int codecID = 28;
		
		int res = ffmpeg.avcodec_find_decoder(codecID);
		
		if (res ==0) {
			tv.setText("Success!");
		}
		else {
			tv.setText("Failed!");
		}
	}
}


FFmpegNative.java:

package cn.dennishucd;

public class FFmpegNative {
	static {
		System.loadLibrary("avutil-52");
		System.loadLibrary("avcodec-55");
		System.loadLibrary("swresample-0");
		System.loadLibrary("avformat-55");
		System.loadLibrary("swscale-2");
		System.loadLibrary("avfilter-4");
		System.loadLibrary("avdevice-55");
		System.loadLibrary("ffmpeg_codec");
	}
	
	public native int avcodec_find_decoder(int codecID);
}



prebuilt文件夹里的为编译好的ffmpeg动态库



Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := avcodec-55-prebuilt
LOCAL_SRC_FILES := prebuilt/libavcodec-55.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avdevice-55-prebuilt
LOCAL_SRC_FILES := prebuilt/libavdevice-55.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avfilter-4-prebuilt
LOCAL_SRC_FILES := prebuilt/libavfilter-4.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avformat-55-prebuilt
LOCAL_SRC_FILES := prebuilt/libavformat-55.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=  avutil-52-prebuilt
LOCAL_SRC_FILES := prebuilt/libavutil-52.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=  avswresample-0-prebuilt
LOCAL_SRC_FILES := prebuilt/libswresample-0.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE :=  swscale-2-prebuilt
LOCAL_SRC_FILES := prebuilt/libswscale-2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := ffmpeg_codec
LOCAL_SRC_FILES := cn_dennishucd_FFmpegNative.c

LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
LOCAL_SHARED_LIBRARIES := avcodec-55-prebuilt avdevice-55-prebuilt avfilter-4-prebuilt avformat-55-prebuilt avutil-52-prebuilt

include $(BUILD_SHARED_LIBRARY)


Application.mk:

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-10


cn_dennishucd_FFmpegNative.c:

#include <math.h>
#include <libavutil/opt.h>
#include <libavcodec/avcodec.h>
#include <libavutil/channel_layout.h>
#include <libavutil/common.h>
#include <libavutil/imgutils.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>

#include "cn_dennishucd_FFmpegNative.h"

#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     cn_dennishucd_FFmpegNative
 * Method:    avcodec_find_decoder
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_cn_dennishucd_FFmpegNative_avcodec_1find_1decoder
  (JNIEnv *env, jobject obj, jint codecID)
{
	AVCodec *codec = NULL;

	/* register all formats and codecs */
	av_register_all();

	codec = avcodec_find_decoder(codecID);

	if (codec != NULL)
	{
		return 0;
	}
	else
	{
		return -1;
	}
}

#ifdef __cplusplus
}
#endif


cn_dennishucd_FFmpegNative.h:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_dennishucd_FFmpegNative */

#ifndef _Included_cn_dennishucd_FFmpegNative
#define _Included_cn_dennishucd_FFmpegNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     cn_dennishucd_FFmpegNative
 * Method:    avcodec_find_decoder
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_cn_dennishucd_FFmpegNative_avcodec_1find_1decoder
  (JNIEnv *, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <TextView
    android:id="@+id/textview_hello"
    android:text="@string/hello"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    />
</LinearLayout>


AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.dennishucd"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    
    <uses-permission android:name="android.permission.CAMERA" />  
	<uses-feature android:name="android.hardware.camera" />  
	<uses-feature android:name="android.hardware.camera.autofocus" />  
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".FFmpeg4AndroidActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android使用FFmpeg进行加密,可以通过以下步骤实现: 1. 首先,确保你已经在项目中添加了FFmpeg文件,并在NativeTools.java中加载了该文件\[2\]。 2. 在cpp文件中,引入FFmpeg的头文件\[3\],以便可以调用FFmpeg的API。 3. 在加密的功能函数中,可以使用FFmpeg提供的API来实现加密操作。例如,你可以使用AVFormatContext结构体来打开输入文件,然后使用AVPacket结构体来读取和写入数据。 4. 在加密过程中,你可以使用FFmpeg提供的加密算法或自定义的加密算法来对音频数据进行加密。你可以根据自己的需求选择适合的加密算法。 5. 最后,你可以将加密后的音频数据保存到文件中,或者将其传输到其他地方进行处理。 需要注意的是,加密操作涉及到版权和安全等问题,所以在进行加密操作时,请确保你有合法的授权和遵守相关法律法规。 希望以上信息对你有帮助! #### 引用[.reference_title] - *1* *3* [Android 基于ffmpeg开发简易播放器 - ffmpeg解封装音视频流媒体技术音视频流媒体技术](https://blog.csdn.net/yinshipin007/article/details/128006767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android集成FFmpeg,看这篇就够了](https://blog.csdn.net/gxhea/article/details/115864423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值