ffmpeg在android上输出滑屏问题处理

ffmpeg部分机器上有花屏的问题


原代码如下:

while(av_read_frame(formatCtx, &packet)>=0 && !_stop && NULL!=window && bInit) {
		// Is this a packet from the video stream?
		if(packet.stream_index==videoStream) {
			// Decode video frame
			avcodec_decode_video2(codecCtx, decodedFrame, &frameFinished,
			   &packet);
			// Did we get a video frame?
			if(frameFinished) {
				// Convert the image from its native format to RGBA
				sws_scale
				(
					sws_ctx,
					(uint8_t const * const *)decodedFrame->data,
					decodedFrame->linesize,
					0,
					codecCtx->height,
					frameRGBA->data,
					frameRGBA->linesize
				);

				if(packet.dts == AV_NOPTS_VALUE
						 && decodedFrame->opaque && *(uint64_t*)decodedFrame->opaque != AV_NOPTS_VALUE)
				{
					pts = *(uint64_t *)decodedFrame->opaque;
					LOGD("pst1: %d",pts);
				}
				else if(packet.dts != AV_NOPTS_VALUE) {
				  pts = packet.dts;
				  LOGD("pst2: %d",pts);
				} else {
				  pts = 0;
				  LOGD("pst3: %d",pts);
				}
				//pts = av_q2d(codecCtx->time_base) * 1000000.0 * i * 2;
				pts *= 1000;
				//LOGD("debug %d,%d,%f",pts, (
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android 环境中使用 FFmpeg,可以通过将 FFmpeg 库编译进你的应用程序或者使用预编译的库来实现。下面介绍两种方法: 1. 编译 FFmpeg 库 首先,你需要下载 FFmpeg 源代码,并在 Android NDK 环境中编译生成 FFmpeg 库。具体步骤如下: 1.1 下载 FFmpeg 源代码 你可以从 FFmpeg 官网下载最新的源代码,下载地址为:https://www.ffmpeg.org/download.html。 1.2 配置交叉编译环境 在下载 FFmpeg 源代码后,你需要配置交叉编译环境,以便生成适用于 Android 平台的库。具体步骤如下: 1.2.1 安装 Android NDK 首先,你需要下载并安装 Android NDK,下载地址为:https://developer.android.google.cn/ndk/downloads。 1.2.2 配置环境变量 将 Android NDK 目录添加到环境变量中,以便在终端中使用 NDK 工具链。假设你将 Android NDK 安装在 /opt/android-ndk-r21d 目录下,可以通过以下命令将 NDK 目录添加到环境变量中: ``` export PATH=$PATH:/opt/android-ndk-r21d ``` 1.3 编译 FFmpeg 库 在配置好交叉编译环境后,你可以使用以下命令编译 FFmpeg 库: ``` ./configure \ --enable-cross-compile \ --target-os=android \ --arch=arm \ --cpu=armv7-a \ --sysroot=$NDK/platforms/android-21/arch-arm \ --cc=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang \ --cross-prefix=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi- \ --prefix=./ffmpeg_build \ --extra-cflags="-fpic -march=armv7-a -mfpu=neon -mfloat-abi=softfp" \ --extra-ldflags="-shared" \ --disable-static \ --enable-shared \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-symver \ --disable-x86asm ``` 其中,--arch 和 --cpu 参数根据你的设备架构进行调整。如果你的设备是 arm64-v8a 架构,则将参数修改为: ``` --arch=aarch64 \ --cpu=armv8-a \ --sysroot=$NDK/platforms/android-21/arch-arm64 \ --cc=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang \ --cross-prefix=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android- ``` 编译完成后,你可以将生成的库文件复制到你的 Android 项目中,并在代码中调用 FFmpeg 库。 2. 使用预编译的库 如果你不想编译 FFmpeg 库,你可以使用预编译的库文件来实现。你可以在以下链接中下载适用于 Android 平台的 FFmpeg 预编译库:https://github.com/WritingMinds/ffmpeg-android/releases 下载完成后,你可以将库文件复制到你的 Android 项目中,并在代码中调用 FFmpeg 库。 无论你使用哪种方法,你都需要在你的 Android 项目中添加以下依赖项: ``` implementation 'com.writingminds:FFmpegAndroid:0.3.2' ``` 这是一个用于在 Android 平台上使用 FFmpeg 的第三方库,可以简化调用 FFmpeg 库的过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值