当前位置: 首页 > 知识库问答 >
问题:

当MediaCodec解码器配置有SurfaceTexture输出时,如何获取帧时间戳?

许俊贤
2023-03-14

我有一个Android MediaCodec解码器,配置了一个来自SurfaceTexture对象的Surface。MP4文件解码工作良好,帧可以在设备上看到。但是如果尝试用MediaMuxer重新编码为新的MP4文件,则输出文件大小为零,因为SurfaceTexture.getTimestamp()返回的总是0。在这种情况下,获得帧呈现时间的适当方法是什么?

共有1个答案

曾高杰
2023-03-14

则会转发时间戳。你从SurfaceTexture得到的时间戳是制作人提供的任何东西。

当使用MediaCodec进行解码时,您将在BufferInfo对象中接收时间戳。您可以将该时间戳直接传递给编码器的QueueInputBuffer(),或者如果您使用GLES呈现,则将其传递给EGLPresentationTimeAndroid(),这使得它可用于SurfaceTexture。

一个例子可以在这里找到,其他在格拉菲卡。

 类似资料:
  • 我正在尝试从解码的mp4缓冲区中获取PCM样本以进行进一步处理。我首先从使用手机的相机应用程序录制的视频文件中提取音轨,并且我已经确保在获得“音频/mp4”mime键时选择了音轨: 之后,我遍历轨道,向编解码器提供编码访问单元流,并将解码的访问单元拉入ByteBuffer(这是我从此处发布的视频渲染示例中回收的代码https://github.com/vecio/MediaCodecDemo):

  • 我正在尝试使用MediaCodec从视频中检索所有帧,用于图像处理,我正在尝试渲染视频并从outBuffers捕获帧,但我无法从接收到的字节启动位图实例。 我试着将它呈现为一个表面或无(null),因为我注意到当你呈现为null时,outBuffers将获得呈现帧的字节。 这是代码: 任何帮助都是非常有用的

  • Android MediaCodec可以用来解码输出的yuv420格式。我猜应该是NV12格式,但是当我在Nexus6 7.1.1设备上试用的时候。结果很奇怪: > 对于720p视频,它工作良好,输出的yuv可以通过ffplay播放,使用以下命令: ffplay-V信息-F rawvideo-PIXEL_FORMAT yuv420p-VIDEO_SIZE 1280x720 OUT.YUV 当试图解

  • 问题内容: 刚从操场开始。我正在尝试创建一个简单的应用程序。 我创建了一个这样的日期对象: 我如何获得当前时间?在其他语言中,我可以执行以下操作: 但是我找不到像这样的任何属性/方法。我找到了一种方法。我应该用那个吗?如果是这样,怎么办? 问题答案: Swift 3更新: 我这样做: 在Objective-c中看到相同的问题,如何从NSDate获得小时和分钟?与Nate的答案相比,您将获得一个数字

  • 我正在从Ehcache2. X转换到Ehcache3.3.1,我找不到在运行时获取缓存的生存时间配置的方法。以前我使用: 现在,看起来我需要做一些类似于:< code > cache . getruntimeconfiguration()的事情。getExpiry()。getExpiryForCreation()。getLength() 但是,需要特定元素的键、值对,并似乎返回该元素的持续时间。

  • 问题内容: 如何使用Java获取当前日期和时间? 我正在寻找与C#等效的东西。 问题答案: 只需构造一个没有任何参数的新对象即可;这会将当前日期和时间分配给新对象。 在的话的Javadoc的无参数的构造函数: 分配一个Date对象并对其进行 初始化,以便它表示分配它的时间( 以最近的毫秒为单位)。 确保您使用的不是-后者没有零参数构造函数,并且语义有所不同,这是完全不同的对话的主题。:)