我有一个带有android KitKat的nexus 4.
我使用以下命令尝试了屏幕录制:
adb shell screenrecord --verbose /sdcard/demo.mp4
adb shell screenrecord --bit-rate 8000000 --time-limit 30 /sdcard/kitkat.mp4
Run Code Online (Sandbox Code Playgroud)
两次,命令都返回此消息:
Main display is 768x1280 @60.00fps (orientation=0)
Configuring recorder for 768x1280 video at 4.00Mbps
ERROR: unable to create video/avc codec instance
Run Code Online (Sandbox Code Playgroud)
在AndroidStudio中打开的调试控制台中,显示了以下日志消息:
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? Is component secure 0
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? ERROR: Omx_venc::Comp Init Returning failure
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? ERROR: venc_open failed
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? Destroy C2D instance
02-02 18:16:29.058 11072-11086/? E/ACodec? Unable to instantiate a decoder for …Run Code Online (Sandbox Code Playgroud) 我正在尝试在matlab中运行以下客户端和服务器套接字示例代码:http: //www.mathworks.com/help/instrument/using-tcpip-server-sockets.html
这是我的代码.
服务器:
t=tcpip('0.0.0.0', 9994, 'NetworkRole', 'server');
fopen(t);
data=fread(t, t.BytesAvailable, 'double');
plot(data);
Run Code Online (Sandbox Code Playgroud)
客户:
data=sin(1:64);
t=tcpip('localhost', 9994, 'NetworkRole', 'client');
fopen(t);
fwrite(t, data, 'double');
Run Code Online (Sandbox Code Playgroud)
这就是:我运行服务器代码 - >程序等待来自客户端的连接 - >我运行客户端代码 - >在服务器控制台中,我得到:
Error using icinterface/fread (line 163)
SIZE must be greater than 0.
Error in socketTentativaMatlab (line 3)
data=fread(t, t.BytesAvailable, 'double');
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?看起来服务器不等待客户端发送任何东西来尝试读取数据,因此没有数据要读取(它等待客户端连接的想法).
Edit1: 好的,我现在正在发送字符,所以我们肯定知道t.BytesAvaiable =元素数量.
我已经能够以下列方式成功同步接收(这是服务器代码,客户端代码是相同的但我现在发送字符并在与服务器建立连接后暂停1秒):
t=tcpip('0.0.0.0', 30000, 'NetworkRole', 'server');
fopen(t);
data=strcat(fread(t, 1, 'uint8')');
if get(t,'BytesAvailable') > 1
data=strcat(data,fread(t, t.BytesAvailable, 'uint8')');
end
data
Run Code Online (Sandbox Code Playgroud)
这是因为我怀疑bytesAvaiable是在尝试至少读取一次之后剩下要读取的字节数...这似乎不太符合逻辑,但显然是会发生什么.因为我必须至少读一次才知道消息有多少字节......我选择只在第一次读取1个字节.然后我读了剩下的东西,如果还有什么东西......
我可以在matlab进程之间完成这项工作,但我不能在C++和matlab之间做到这一点.C++客户端成功连接到matlab服务器,可以毫无问题地发送数据.但是,在matlab服务器端,我无法阅读它.
所有这些matlab tcpip实现都出现了一些问题!
编辑2: 如果我正确关闭客户端和服务器中的所有套接字(基本上不让程序退出打开套接字),上面的代码接缝一致地工作.我去控制台并键入"netstat"以查看所有连接...事实证明,因为我离开了开放套接字,一些连接处于FIN_WAIT_2状态,这显然使这些连接的端口无法使用.最终连接超时,但需要一分钟或更长时间,因此,确保套接字始终正确关闭是最佳做法.
我不明白为什么t.BytesAvaiable背后的逻辑是什么......它的接缝并不是很有意义.如果我循环并等待它变得大于0,它最终会发生,但这不是同步套接字应该是这样的方式.我的代码允许一个人同步做事,即使我不明白为什么第一次没有正确设置t.BytesAvaiable. …
好吧,我知道机器精度是多少,但是这个,我无法理解......
码:
console.log("meanX",meanX);
meanX2 = meanX * meanX; //squared
console.log("meanX2",meanX2);
Run Code Online (Sandbox Code Playgroud)
控制台输出:
meanX 300.3
meanX2 28493.4400000000002
Run Code Online (Sandbox Code Playgroud)
如果您想知道,meanX2的正确值将是90180.09 这只是截图中可见的众多示例中的一个.

.toFixed(6)似乎解决了这个问题......但我不知道为什么没有它就行不通.
编辑
好的,我不想在这里发布整个程序代码,因为首先我不是唯一的作者,其次,我也不希望在没有我们许可的情况下复制它.但我很乐意解释如何得到这个错误,并在此处发布整个方法/功能代码.
正如您可能从窗口标题中猜到的那样,此代码属于通道检测算法.我们使用Three.js/webgl在视频的每一帧上运行一些预处理着色器,然后我们分析生成的图像.您在屏幕截图中看到的方法/功能是垂直线拟合算法,是整个事物的一部分.我可以看到算法运行得很好,因为我在视频顶部绘制了通道,并且放置得很好.直到突然车道变成水平杆.这种意外的行为正是因为我在这里描述的现象而发生的,因为从那一刻起我开始在控制台中看到错误的数学.
此外,由于视频和算法每次都以略微不同的fps运行,因此问题并不总是发生在视频的同一时刻,有时它根本不会发生.
这是代码(它有一些改动,因为我试图隔离问题):
this.perpendicularLineFit = function (points, slopeSign) {
var count = points.length;
var sumX = 0,
sumY = 0;
var sumX2 = 0,
sumY2 = 0,
sumXY = 0;
var meanX, meanY;
var i, lowp = {}, highp = {};
var B;
var slope;
var originY;
for (i = 0; i < count; i++) {
sumX += points[i].x; …Run Code Online (Sandbox Code Playgroud) 我想创建一个2D游戏,我想知道哪条路可以根据我的知识背景和游戏本身的一些细节.
我的背景(相关的东西):
我10天前开始学习android编程,我已经完成了游戏菜单.
我在java(桌面)编程方面有相当多的经验.
我在过去使用C++中的openGL有一些经验,但只做3d东西(我也记不起很多东西).我从来没有编写任何开放的GL着色器.我学习了诸如旋转/缩放/平移,应用纹理(纹理坐标)和一些非常原始的灯光等基本变换.
该游戏应该具有:
精灵.每帧+ -50平均可见.
捏缩放/平移手势.
此功能:能够将一个精灵移动到另一个地方,使用手指绘制要跟随的路径.这应该可以在任何缩放级别.
声音.枪声,爆炸,简单的短音.
作为奖励,有一些效果,如发光线,扭曲效果等,这将是很好的,但这不是必需的.
应该有简单的方法来绘制几何形状,如圆形/正方形/三角形等(我的意思是不是在游戏中它自己,而是在用于开发它的API中)
我想在半个月内完成游戏.
现在您认为最好的解决方案是游戏的特点,我的背景和时间可用吗?OpenGL ES 2.0?帆布?或API /图形/游戏引擎/库(哪些,是否有文档/教程?)?
游戏本身很简单.我提到的东西真的是这里最重要的东西,至少对我而言.
作为android和openGL 2.0的初学者,我正在测试简单的东西,看看它是怎么回事.
我在http://developer.android.com/training/graphics/opengl/touch.html下载了该示例.
我更改了代码以检查是否可以围绕(0,0,0)点(正方形的中心)旋转摄像机的旋转.
所以我这样做了:
public void onDrawFrame(GL10 unused) {
// Draw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// Set the camera position (View matrix)
long time = SystemClock.uptimeMillis() % 4000L;
float angle = ((float) (2*Math.PI)/ (float) 4000) * ((int) time);
Matrix.setLookAtM(mVMatrix, 0, (float) (3*Math.sin(angle)), 0, (float) (3.0f*Math.cos(angle)), 0 ,0, 0, 0f, 1.0f, 0.0f);
// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
// Draw square
mSquare.draw(mMVPMatrix);
}
Run Code Online (Sandbox Code Playgroud)
我期望相机总是看到正方形的中心((0,0,0)点),但事实并非如此.相机确实在广场周围旋转,但广场并没有停留在屏幕的中心..相反,它正沿着X轴移动......:

我也期望如果我们给eyeX和eyeY提供与centerX和centerY相同的值,就像这样:
Matrix.setLookAtM(mVMatrix, 0, 1, 1, -3, 1 ,1, …Run Code Online (Sandbox Code Playgroud) android ×3
opengl-es ×2
graphics ×1
javascript ×1
matlab ×1
matrix ×1
mediacodec ×1
sockets ×1