天道酬勤,学无止境

frame-rate

Cocos2dx 2.1.4 Game, Continuos FPS drop and never recovers

I am creating a game using cocos2dx 2.1.4. Its FPS drops continuously , and never recover. Please find the details as follows Background about the way I am doing things:- Its game about scrolling down some shapes, each shape is made up of some square blocks.I have 7 kind of blocks. All loaded in a Sprite Sheet and using these blocks from this sprite sheet I create a shape. A level file is consist of these shapes. I load two levels at the same time one onscreen and another off screen to make it seamless scrolling. For loading two levels at the same time I used two different CCSprite game batch

2021-10-26 23:03:45    分类:问答    ios   cocos2d-x   frame-rate   ccspritebatchnode

编码器中的 fixed_frame_rate_flag 用于什么?(What is fixed_frame_rate_flag used for in encoders?)

问题 编码器中使用了一个称为 fixed_frame_rate_flag 的标志。 我一直无法找到关于这是什么及其意义的任何明确解释。 该标志可以设置为 0 或 1,但我不知道这意味着什么。 任何帮助,信息将不胜感激。 回答1 固定帧率与可变帧率相反。 如果视频是固定帧速率,则每一帧都有一个可预测的时间戳。 timestamp = frame_number * frame_rate 。 如果它是可变的,则每一帧都有自己的持续时间,有些帧可能会显示更长或更短的时间,并且具有不可预测的时间戳。

2021-10-24 01:37:03    分类:技术分享    h.264   frame-rate   mpeg

在 Three.js 中调试低 FPS(Debugging low FPS in Three.js)

问题 我正在处理 Three.js WebGL 场景,当我缩小时注意到 60 FPS,以便所有观察(约 20,000 个三角形)都在视野中,但是当我放大时 FPS 非常低,因此只有很小的三角形的子集在视图中。 我想弄清楚是什么导致了这种差异。 我的直觉是相反的情况是正确的:我假设当用户放大近处和远处的剪裁平面时,会从场景中移除许多三角形,这会增加 FPS。 我想弄清楚为什么这种直觉在这个场景中是错误的。 如何识别一个three.js程序中使用的完整调用堆栈? 理想情况下,我想确定所有函数/方法调用以及执行该函数所需的时间,以便我可以尝试找出我正在处理的着色器的哪一部分在用户放大时会杀死 FPS。 回答1 GPU 有几个基本的地方可以用来消耗计算能力。 这应该是很明显的。 一种是每个顶点运行一次顶点着色器。 另一个是每个像素/片段运行一次片段着色器。 像素几乎总是比顶点多一吨。 单个 1920x1080 屏幕接近 200 万像素,但可以覆盖在 3 顶点三角形或 4 或 6 顶点四边形(2 个三角形)中。 这意味着要覆盖整个屏幕,顶点着色器运行了 3 到 6 次,而片段着色器运行了 200 万次!!! 向片段着色器发送太多工作称为“填充边界”。 你最大化了填充率(用像素填充三角形),这就是你所看到的。 在我的 2014 年 MacBook Pro 上更糟糕的情况下,在达到每秒 60

2021-10-22 20:12:07    分类:技术分享    three.js   frame-rate

实时生成(泊松?)随机变量(Generate (Poisson?) random variable in real-time)

问题 我有一个实时运行的程序,帧速率可变,例如可以是 15 fps,可以是 60fps。 我希望事件平均每 5 秒发生一次。 每一帧,我想调用一个函数,该函数将自上一帧以来的时间作为输入,并在调用它的情况下平均每 5 秒的经过时间返回一次 True。 我认为与泊松分布有关..我该怎么做? 回答1 这实际上取决于您要使用的分布,您指定的只是平均值。 我会,就像你说的,期望泊松分布能很好地满足你的需求,但你也在标题中加入了“均匀随机变量”,这是一个不同的分布,无论如何让我们选择前者。 因此,如果您需要泊松分布,则可以使用累积密度函数轻松生成样本。 只需遵循此处的伪代码:生成泊松 RV,5 秒是 lambda 的值。 我们称这个函数为 Poisson_RN()。 此时的算法非常简单。 global float next_time = current_time() boolean function foo() if (next_time < current_time()) next_time = current_time() + Poisson_RN(); return true; return false; 回答2 通过独立试验以固定比例产生真/假结果的随机变量称为几何随机变量。 在任何时间范围内,以 1/(5*fps) 的概率生成真值,从长远来看,您将平均每 5 秒获得一个真值。

2021-10-22 16:44:39    分类:技术分享    language-agnostic   math   random   real-time   frame-rate

Python OpenCV video.get(cv2.CAP_PROP_FPS) 返回 0.0 FPS(Python OpenCV video.get(cv2.CAP_PROP_FPS) returns 0.0 FPS)

问题 这是我的视频 这是查找fps的脚本: import cv2 if __name__ == '__main__' : video = cv2.VideoCapture("test.mp4"); # Find OpenCV version (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.') if int(major_ver) < 3 : fps = video.get(cv2.cv.CV_CAP_PROP_FPS) print "Frames per second using video.get(cv2.cv.CV_CAP_PROP_FPS): {0}".format(fps) else : fps = video.get(cv2.CAP_PROP_FPS) print "Frames per second using video.get(cv2.CAP_PROP_FPS) : {0}".format(fps) video.release(); 这是此视频脚本的输出: Frames per second using video.get(cv2.CAP_PROP_FPS) : 0.0 为什么它返回0.0? FPS 为 14.0 回答1 执行pip install python-opencv修复了问题

2021-10-21 19:34:49    分类:技术分享    python   opencv   mp4   frame-rate

SPS 和 PPS H264 编码器的 MediaCodec 配置(MediaCodec configuration for SPS and PPS H264 encoder)

问题 我正在从 Android 进行 RTSP 流传输。 我已将 MediaCodec 配置如下: MediaCodecInfo codecInfo = selectCodec(MIME_TYPE); int mBitrate = (int) ((mHeight * mWidth * frameRate)* 2 * 0.07); MediaFormat mediaFormat = MediaFormat.createVideoFormat(MIME_TYPE, mWidth,mHeight); mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, mBitrate); mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30); mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,colorFormat); mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL,1); mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); try{ mediaCodec.configure

2021-10-21 19:32:55    分类:技术分享    android   rtsp   frame-rate   android-mediacodec

获取视频中每一帧的时间戳(Getting timestamp of each frame in a video)

问题 我已经使用我编写的 Android 5.2 应用程序从平板电脑的前置摄像头录制了几个视频。 我以毫秒(Unix 时间)为单位存储了每个视频的开始时间戳。 不幸的是,每个视频都有不同的帧率(从 20 到 30)。 使用 OpenCV,我可以获得每个视频的帧率: import cv2 video = cv2.VideoCapture(videoFile) fps = video.get(cv2.CAP_PROP_FPS) 这很有效,理论上我可以为视频中的每一帧添加 1000/fps(由于毫秒)。 但这假设帧率在整个录制过程中保持稳定。 我不知道是不是这种情况。 Python 是否有可能独立于帧率获取视频中每一帧的时间戳(以毫秒为单位)? 回答1 你想要cv2.CAP_PROP_POS_MSEC 。 在此处查看所有不同的捕获属性。 编辑:实际上,正如 Dan Mašek 向我指出的那样,当您获取该属性时,OpenCV 似乎正在执行该计算(至少假设您使用的是 FFMPEG): case CV_FFMPEG_CAP_PROP_POS_MSEC: return 1000.0*(double)frame_number/get_fps(); 所以看起来你总是会依赖一个恒定的帧率假设。 但是,即使假设帧速率恒定,重要的是乘以帧数,而不仅仅是继续增加1000/fps 。 当您反复添加浮点数时

2021-10-20 18:14:45    分类:技术分享    python   opencv   video   frame-rate

What is fixed_frame_rate_flag used for in encoders?

There is a flag called the fixed_frame_rate_flag used in encoders. I haven't been able to find any clear explanation of what this is, and what its significance is. The flag can either be set to 0 or 1, but I don't know what this would imply. Any help, information would be appreciated.

2021-10-20 09:26:31    分类:问答    h.264   frame-rate   mpeg

即使使用 CADisplayLink 也卡在 40 fps 上?(Getting stuck at 40 fps even with using CADisplayLink?)

问题 起初我使用 NSTimer 并遇到了帧速率卡在每秒 40 帧的问题。 我已阅读有关使用 CADisplayLink 解决问题的信息。 它似乎工作了一段时间,但最近,应用程序从 60 开始,然后过了一会儿(大约 5 - 20 秒),应用程序开始以 40 - 41 fps 运行并卡在那里。 我正在剔除对象,以便在对象不在视野范围内时绘制较少,但它仍然卡在那里。 一种似乎确实可以暂时解决问题(大约 10 秒)的不寻常方法是从 iphone 底部断开电线,然后重新连接。 显然,这并不理想,但只是想知道为什么会发生这种情况以及为什么它会在某种程度上修复它,好像它重置了某些值或其他东西。 任何帮助将不胜感激,谢谢。 回答1 你有没有检查过你是否真的丢帧? 您是否使用 CPU/GPU 到每秒只能绘制 40 帧的程度,还是软件中的某个地方存在问题? 请记住,如果CADisplayLink无法触发屏幕刷新(由于主线程忙于绘制前一帧之类的事情),那么它可能会跳过它,因为它没有足够的时间来完成。 因此,如果您的某些帧的绘制时间超过 0.01666... 秒,您将错过之后立即绘制帧的时间间隔,并且速度可能会比实际情况更糟。 还请记住,移动设备并不总是能够快速绘制所有内容。 iPhone 4 中的 A4 处理器非常好,但要每秒填充 960x640 屏幕像素 60 次仍然是一项艰巨的任务。

2021-10-16 15:43:44    分类:技术分享    iphone   frame-rate   cadisplaylink   opengl-es

使用帧率和帧计数器的定时器可靠吗?(Timer using frameRate and frame counter reliable?)

问题 我正在使用 p5js 编写带有计时器倒计时的动画。 我将计时器设置为在草图中由 draw() 函数设置动画的对象内的每一帧进行更新。 因此, setInterval() 不适用于我正在尝试做的事情。 我想我可以使用 frameRate 和一个帧计数器来确定是否已经过了一秒钟: this.updateTimer = function(){ this.framecounter++; if(this.framecounter > frameRate()){ this.framecounter = 0; //increment seconds } } 这可靠吗? 我针对实际计时器对其进行了测试,大约 15 秒后似乎提前了大约 1 秒。 有没有更好的方法通过每帧调用一个函数来做到这一点? 谢谢! 回答1 为什么不直接使用frameCount变量? 参考资料中提供了更多信息。 您也可以改用millis()函数。 同样,参考是您最好的朋友。 如果你仍然不能让它工作,请发布一个 MCVE(或者更好,一个 CodePen 或 JSFiddle),我们可以运行它来查看问题。

2021-10-15 20:34:35    分类:技术分享    javascript   timer   frame-rate   p5.js