我正在尝试使用MediaCodec和MediaMux,我遇到了一些麻烦.
以下是logcat的错误:
12-13 11:59:58.238: E/AndroidRuntime(23218): FATAL EXCEPTION: main
12-13 11:59:58.238: E/AndroidRuntime(23218): java.lang.RuntimeException: Unable to resume activity {com.brendon.cameratompeg/com.brendon.cameratompeg.CameraToMpeg}: java.lang.IllegalStateException: Can't stop due to wrong state.
12-13 11:59:58.238: E/AndroidRuntime(23218): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2918)
Run Code Online (Sandbox Code Playgroud)
代码在"mStManager.awaitNewImage();"处出错,它位于onResume函数中.logcat说"相机帧等待时间".
mStManager是SurfaceTextureManager类的一个实例.并且"相机帧等待时间"来自awaitNewImage()函数.我已将该课程添加到我的帖子中.
我的部分代码是这样的(onCreate函数和onResume函数):
@Override
protected void onCreate(Bundle savedInstanceState) {
// arbitrary but popular values
int encWidth = 640;
int encHeight = 480;
int encBitRate = 6000000; // Mbps
Log.d(TAG, MIME_TYPE + " output " + encWidth + "x" + encHeight + " @" + encBitRate);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera_to_mpeg);
prepareCamera(encWidth, encHeight);
prepareEncoder(encWidth, encHeight, …
Run Code Online (Sandbox Code Playgroud) 我需要知道Android设备是否支持JNI以及哪个版本.我可以使用哪个函数调用来执行此操作?我应该从Java端还是NDK端调用它?
System.currentTimeMillis()给出的时间错误。它返回 1980 年以来的时间值,而且通过此函数获取的时间值有时与实际时间不同。函数返回的一些示例值
315977198121
315965244789
316002166580
315982533137
Run Code Online (Sandbox Code Playgroud) 我正在尝试为 Android 创建一个 2d 游戏,目前我正在努力实现大约 30 fps 的恒定 fps(我认为 30 对手机游戏来说已经足够了)。我正在使用 SurfaceView 和一个非常直接的游戏循环:
while (isOk==true)
{
if (!holder.getSurface().isValid()) continue;
c = holder.lockCanvas();
update();
draw(c);
holder.unlockCanvasAndPost(c);
t2= System.currentTimeMillis();
all++;
if ( mspf /* miliseconds per frame, and it's set to 1000/30 */ -(t2-t1) > 0 )
{
try {
t.sleep(mspf-(t2-t1));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
Log.w("Super",String.valueOf(mspf-(t2-t1))+ " o " + String.valueOf(++total)+ "out of " +String.valueOf(all));
t1=Math.max( t1+mspf, t2);
}
Run Code Online (Sandbox Code Playgroud)
这是游戏循环。正如您可能已经注意到的,我使用 Log.w 来查看我有多少帧剩余时间可以用于 …
我正在尝试调试一个挂起的进程,进程 id 的 strace 输出有最后一行:
recvfrom(9, <detached ...>
据此我了解到该进程正在套接字上等待。
但我不知道这是什么或什么样的插座。我如何才能发现更多相关信息?文件描述符 9 会给我更多信息吗?我如何使用此文件发现来了解有关它正在等待什么的更多信息?
它是一个Python进程,在Linux中运行。
我使用MediaProjection API在Android中录制屏幕。现在,我想知道是否可以创建一个您实际上可以看到但在视频中看不到的“隐藏”视图,因此不应记录该视图。此外,是否可以禁用通知甚至通知中心的记录?
那么是否可以像“表面层系统”那样进行配置,从而可以决定要记录的层?
我正在尝试使用 MediaDecoder 类编写视频播放器,我遇到了一个问题,它阻止了我的开发,
这是一个代码片段
extractor = new MediaExtractor();
extractor.setDataSource(filename);
MediaFormat format = extractor.getTrackFormat(i);
extractor.selectTrack(0);
MediaCodec decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(format, null, null, 0);
decoder.start();
ByteBuffer[] inputBuffers = decoder.getInputBuffers();
ByteBuffer[] outputBuffers = decoder.getOutputBuffers();
Log.d(TAG, " "+decoder.getOutputFormat());
Run Code Online (Sandbox Code Playgroud)
问题是每个设备打印的输出格式都会发生变化,因此无法将其打印到 Open GL 纹理。
有没有办法强制解码器始终输出相同的格式?如果没有,有没有人知道任何可以进行转换的库?
非常感谢您的任何见解
我经常看到很多
03-18 16:40:18.729: W/dalvikvm(22567): JNI: pin count on array 0x413e4488 ([C) is now 11
03-18 16:40:18.729: W/dalvikvm(22567): JNI: pin count on array 0x413e4488 ([C) is now 12
03-18 16:40:18.729: W/dalvikvm(22567): JNI: pin count on array 0x413e4488 ([C) is now 13
03-18 16:40:18.729: W/dalvikvm(22567): JNI: pin count on array 0x413e4488 ([C) is now 14
03-18 16:40:18.729: W/dalvikvm(22567): JNI: pin count on array 0x413e4488 ([C) is now 15
03-18 16:40:18.729: W/dalvikvm(22567): JNI: pin count on array 0x413e4488 ([C) is now 16
03-18 …
Run Code Online (Sandbox Code Playgroud) 我有一个LinearLayout
已经包含多个元素.我想以编程方式添加底部边距.
我在适配器代码中添加以下代码段.
两者都不起作用.
View linearLayout = convertView.findViewById(R.id.spinnerL);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)linearLayout.getLayoutParams();
params.setMargins(0, 0, 0, 10);
linearLayout.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
这个甚至删除了我的元素:
View linearLayout = convertView.findViewById(R.id.spinnerL);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(30, 20, 30, 10);
linearLayout.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何在运行时添加边距?
我为相机预览创建了一个扩展的SurfaceView类.
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
CameraPreview(Context context) {
super(context);
mHolder = this.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
try {
mCamera = Camera.open();
mCamera.setPreviewDisplay(holder);
} catch (Exception e){
Log.wtf("surfaceCreated", e.toString());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
try {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
} catch (Exception e){
Log.wtf("surfaceDestroyed", e.toString());
}
}
public void …
Run Code Online (Sandbox Code Playgroud) android ×9
dalvik ×2
surfaceview ×2
android-ndk ×1
c ×1
frame-rate ×1
java ×1
mediacodec ×1
ntp ×1
python ×1