Java 代码
package com.bitmaptest;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class bitmaptest extends Activity {
private static final int SCP = 0;
private char [] mBuf;
private byte [] mByteBuf;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBuf = new char[320*480*3];
mByteBuf = new byte[320*480*2];
setContentView(new myView(this));
}
class myView extends View{
public myView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
byte[] buf = new byte[320*480*2 ];
Log.d("scrcap", "scrcap=------------------------");
if(0 == scrcap(buf))
{
Log.d("scrcap", "back");
int[] colors = new int[320*480];
for(int i = 0;i < colors.length;i ++)
{
int r = 0x000000ff &( ((int)buf[i*2 +1] & 0x000000f8)>>3 );
int g = 0x000000ff &( (((int)buf[i*2 +1] & 0x00000007) << 3) |((int)buf[i*2 ] & 0x000000e0)>>5 );
int b = 0x000000ff &( ((int)buf[i*2] & 0x0000001f) );
colors[i] = 0xff000000 | (r << 19 )| ( g << 10 )| b<<3;
}
Bitmap.Config config = Bitmap.Config.RGB_565;
Bitmap mBitmap = Bitmap.createBitmap(colors,320,480,config);
Paint mPaint = new Paint();
canvas.drawBitmap(mBitmap,0, 0, mPaint);
}
}
}
public static native int scrcap(byte[] data);
static {
System.loadLibrary("scrcap");
};
}
JNI 代码 在虚拟机下无法直接使用, fb open错误
#include <jni.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <android/log.h>
#include <sys/mman.h>
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, "!!!!!", __VA_ARGS__)
#define FB_DEV "/dev/graphics/fb0"
#define SIZE 320*480*2
jint Java_com_bitmaptest_bitmaptest_scrcap(JNIEnv* env, jobject thiz,jbyteArray data)
{
LOGE("--------=================-----------------");
jbyte* pdata = (*env)->GetByteArrayElements(env,data, 0);
char buf[SIZE];
int fd = open(FB_DEV,O_RDWR);
if(fd <= 0)
{
LOGE("OPEN fb device open error");
return -1;
}
void * fb_mem = (void *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if(-1L == (int)fb_mem)
{
LOGE("OPEN fb device mmap error");
return -1;
}
memcpy(buf,fb_mem,SIZE);
munmap(fb_mem,SIZE);
close(fd);
memcpy(pdata,buf,SIZE);
(*env)->ReleaseByteArrayElements(env,data, pdata, 0);
return 0;
}
JNI makefile
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
LOCAL_SRC_FILES := scrcap.c
LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog
LOCAL_MODULE := scrcap
include $(BUILD_SHARED_LIBRARY)
分享到:
相关推荐
压缩包内的文件如"Unit1.pas"和"Unit1.fmx"可能是Delphi项目中的源代码文件,"Android实例之MediaPlayer播放音乐和视频.jpg"可能是示例的截图。如果你想要了解更多关于这个实例的细节,可以查看这些文件。 总之,这...
本篇将详细介绍如何在Android应用中集成VLC库,实现RTSP流的播放、录像及截屏功能。 首先,你需要集成VLC到你的Android项目中。这通常通过添加VLC的AAR(Android Archive)依赖来完成。VLC的Android版本提供了广泛...
它允许客户端发送指令来启动、暂停、停止或者快进/后退媒体流。在 Android 中,MediaPlayer 可以用来播放 RTSP 流,但需要确保设备支持 RTSP。 4. **DLNA (Digital Living Network Alliance)**:DLNA 是一种规范,...
以下是一个简单的截图示例: ```csharp mediaPlayer.Position = TimeSpan.FromSeconds(0); // 定位到特定时间点 mediaPlayer.UpdateLayout(); // 确保元素已更新渲染 RenderTargetBitmap bitmap = new ...
本资源“安卓Android源码——RTSP播放器源码.zip”提供了一个实现RTSP播放功能的示例源码,这对于理解如何在Android应用中集成RTSP流媒体播放至关重要。以下是关于这个主题的详细知识: 1. **RTSP简介**: 实时流...
在本文中,我们将深入探讨如何使用Qt库在视频播放窗口上创建一个透明窗口,并实现在该透明窗口上进行区域截图的功能。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。通过Qt...
本项目"SurfaceView + MediaPlayer 实现的视频播放器"就是一个典型的示例,它展示了如何利用这两种原生Android库来创建一个简单的视频播放应用。 首先,我们来了解`SurfaceView`。`SurfaceView`是一个特殊的视图,...
ExoPlayer是一个可扩展的Android媒体播放器,支持自定义解码器和渲染器,能更好地处理网络流媒体。要播放网络视频,首先需要添加ExoPlayer库依赖,然后创建SimpleExoPlayer实例,设置DataSource并绑定到视图: ```...
在Android系统中,来电拦截和自定义提示音是开发者可以实现的高级功能,这涉及到对Android系统的电话服务和媒体播放的深入理解。本资源提供的"Android 来电拦截及拦截后的提示音源码"是一个很好的学习和实践示例,...
5. **视频流处理**:对于网络流媒体,`MediaPlayer`会自动处理流的解码和播放。如果源码包含自定义的流处理逻辑,可能涉及`Extractor`和`Decoder`的使用,例如`MediaExtractor`用于读取媒体数据,`MediaCodec`用于...
ExoPlayer是Android系统的一个强大、可自定义的媒体播放器框架,相比系统默认的MediaPlayer,提供了更高级的特性和更好的性能。 **描述分析:** 描述中的"电台播放器"明确了应用的主要功能,即用于收听广播电台。...
Vitamio是一款专为Android和iOS平台设计的多媒体开发框架,它提供了强大的功能,使得开发者可以轻松地在应用程序中集成音频、视频播放以及直播流媒体等功能。Vitamio的出现极大地简化了多媒体处理的复杂性,为开发者...
"1_130305225136_1_100_150.png"可能是一个示例截图,展示系统的运行效果或关键界面。而"PC机摄像头摄像数据在Android手机上同步显示的源"可能是一个包含所有源代码的文件夹,其中可能包含PC端的服务器程序和Android...
1. **多媒体框架**:Android的多媒体框架包括MediaCodec、MediaPlayer、MediaExtractor等组件,它们用于处理音频和视频数据。在本项目中,开发者将了解到如何利用这些组件解码、播放和控制视频流。 2. **自定义视频...
2. **AudioTrack和MediaPlayer**:Android提供的音频播放API,AudioTrack允许低级控制,而MediaPlayer更适合简单的媒体播放需求。 3. **Service组件**:音乐播放通常需要在后台持续运行,因此会用到Service组件,...
在Android平台上开发..."1_121023101159_1.png"可能是示例截图,展示了应用的界面或者工作流程。通过分析这些源代码,开发者可以学习到Android平台上的实时视频处理和远程监控应用的实现方法,进一步提升自己的技能。
1. "3D影音播放器示例图片.jpg" - 这可能是播放器在实际运行时的截图,展示了3D效果,开发者可以通过这张图片初步理解播放器的界面设计和3D视觉效果。 2. "3D影音播放器源码说明.txt" - 这个文件很可能是对源代码的...
1-120QR133400-L.png可能是截图或示例图片,有助于理解代码的工作流程。 在实际开发中,除了基础的录音功能,还可以考虑添加暂停和恢复录音、实时预览音量、设置录音时长限制等功能,以满足不同应用场景的需求。...
在Android平台上,开发一个能够截取视频流并录制屏幕的功能是一项技术挑战,但并非不可能的任务。这个"mediaPlayer.zip"文件可能包含了一整套实现这一功能的代码示例或者资源。接下来,我们将深入探讨实现这一功能所...
源码说明.txt文件可能包含了关于如何编译和运行源代码的详细步骤,而提供的截图可能是播放器界面的示例。通过研究这些资料,开发者可以学习到Android音乐播放器的完整实现流程,这对于进阶Android开发或者学习媒体...