ffmpeg解码后的视频帧怎样显示出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg解码后的视频帧怎样显示出来相关的知识,希望对你有一定的参考价值。

参考技术A 贴你一段代码,希望有用
[mw_shl_code=cpp,true]
static Surface* getNativeSurface(JNIEnv* env, jobject jsurface)
jclass clazz = env->FindClass("android/view/Surface");
if(clazz == NULL)
return NULL;

jfieldID field_surface = env->GetFieldID(clazz, ANDROID_VIEW_SURFACE_JNI_ID, "I");//env->GetFieldID(clazz, "mSurface", "I");
if(field_surface == NULL)
return NULL;

return (Surface *) env->GetIntField(jsurface, field_surface);


static int initBitmap(SkBitmap *bitmap, int format, int width, int height, bool allocPixels)
switch (format)
case PIXEL_FORMAT_RGBA_8888:
bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height);
break;

case PIXEL_FORMAT_RGBA_4444:
bitmap->setConfig(SkBitmap::kARGB_4444_Config, width, height);
break;

case PIXEL_FORMAT_RGB_565:
bitmap->setConfig(SkBitmap::kRGB_565_Config, width, height);
break;

case PIXEL_FORMAT_A_8:
bitmap->setConfig(SkBitmap::kA8_Config, width, height);
break;

default:
bitmap->setConfig(SkBitmap::kNo_Config, width, height);
break;


if(allocPixels)
bitmap->setIsOpaque(true);
//-- alloc array of pixels
if(!bitmap->allocPixels())
return -1;


return 0;


int AndroidSurface_register(JNIEnv* env, jobject jsurface)
__android_log_print(ANDROID_LOG_INFO, TAG, "registering video surface");

sSurface = getNativeSurface(env, jsurface);
if(sSurface == NULL)
return ANDROID_SURFACE_RESULT_JNI_EXCEPTION;


__android_log_print(ANDROID_LOG_INFO, TAG, "registered");

return ANDROID_SURFACE_RESULT_SUCCESS本回答被提问者和网友采纳

以上是关于ffmpeg解码后的视频帧怎样显示出来的主要内容,如果未能解决你的问题,请参考以下文章

视频学习笔记:Android ffmpeg解码多路h264视频并显示

(四)Android通过ffmpeg解码音频

ffmpeg播放时刻与视频文件时间戳对齐(同步)

ffmpeg实时编码解码部分代码

ffmpeg-解码视频一个视频帧的步骤

FFmpeg使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )