首页
学习
活动
专区
圈层
工具
发布

如何使用MediaCodec解码音视频

播放一个音视频文件的时候,我们知道需要经过解协议->解封装->解码音频/视频->音频/视频同步->渲染播放这几个步骤,其中解码音频/视频是整个流程中最核心的一个环节.每个步骤的详细解释可以参考上篇文章Android...中如何使用OpenGL播放视频 Android平台下解码音视频可以采用软件解码如ffmpeg,或使用硬件解码如MediaCodec来实现软件解码:利用CPU进行解码处理,这种方式会加大CPU负担并增加功耗...软硬结合,才是王道->_-> 当然,本篇文章所描述的是使用硬件解码MediaCodec的方式来解码一个视频文件....MediaCodec简介 android.media.MediaCodec是从API16开始由Android提供的供开发者能更加灵活的处理音视频的编解码组件,与MediaPlayer/MediaRecorder...MediaCodec拥有一组输入输出缓冲队列,采用异步的方式来处理数据.

2.8K20

如何编写有用的错误消息?

品牌和产品:消息应该反映你的品牌或产品的声音和基调,这些内容还要同上下文和用户心态保持平衡。 那么,如何编写对所有人和用户都有帮助的错误消息呢?你该从哪里入手? 1(先)不要写任何东西!...用户需要在他们遇到问题时获得错误消息的帮助——所以这些消息最好是有用的。 因此,与其“编写”错误消息,不如考虑“构建”消息。...2打下坚实的基础 如果你正在创建一个全新的网站、工具或系统,请召集整个团队,共同列出所有可能出错的事情,例如: 可能提交错误信息的人 将用户引向不存在页面的损坏链接 系统整个崩溃,没有任何解释 然后,开始对它们分组...是:解释发生了什么,或者为什么有些事情不起作用。 否:如果我们不知道出了什么问题,请承认并告诉他们。向他们保证我们正在努力修复问题。 我们可以现在就修复吗?...你现在可以按这样的结构来编写错误消息: [解释] [指导] [道歉] [解释] [解决] 或者在非常糟糕的情况下: [道歉] [承认,安抚] [引导他们回来] 在密码框中,用户可能忘记了正确密码。

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么是好的错误消息?

    错误信息是我们在线日常生活的一部分。每次服务器故障或没有网络,或忘记在表格中添加一些信息,我们就会收到错误信息。"出错了" 是常见的做尘。但是什么出错了?发生了什么?...在介绍好的提示之前,我们先来看一下什么是不好的错误提示。 不好的错误提示 图片 Inappropriate tone 不恰当的语气: 想象一下,一个医生在做一个手术,然后突然说 "哎呀!...这些专业术语对用户来说并不重要,他们只想知道什么地方出了问题,如何解决。  Passing the blame: 甩锅:比如「无法连接到三方服务」。尽量把重点放在问题上,而不是导致问题的行动上。...好的错误提示 图片 Say what happened and why: 说明出错的原因:让用户清楚的知道发生错误的原因,可以通过视觉和文字的结合来完成。解释用户为什么会出现这个错误。...Help them fix it 帮助他们解决:比如「了解如何解决这个问题」,并附加一篇知识库文章和链接。

    2.7K30

    消息队列:听我解释,我真的不是只有Kafka!

    同时在该场景里,会存在依赖三个下游服务,如果其中一个下游服务失败后,该如何处理,是重试还是返回失败等这些细节的处理。如果后期这部分数据还想在其他渠道分发,那又该如何对接。...针对采用内存存储数据的方案而言,难点一方面在于如何在不降低访问效率的情况下,充分利用有限的内存空间来存储尽可能多的数据,这个过程中少不了对数据结构的选型、优化;另一方面在于如何保证数据尽可能少的丢失,我们可以看到针对此问题的解决方案通常是快照...另一方面在于如何尽可能减少对磁盘的频繁访问,一些做法是采用mmap进行内存映射,提升读性能;还有一些则是采用缓存机制缓存频繁访问的数据。...推荐阅读 如何用函数式编程思想优化业务代码,这就给你安排上! 拒绝代码臃肿,这套计算引擎设计方法值得一看!...保姆级教程: c++游戏服务器嵌入v8 js引擎 程序员如何把你关注的内容推送到你眼前?揭秘信息流推荐背后的系统设计 ----

    57030

    Nginx Error_log 错误日志配置和解释

    今天将会详细解释nginx中的Error日志文档。 2. 配置 nginx中Error的日志等级是要比access日志要高。通常,配置在/etc/nginx/nginx.conf文件中。...错误级别:notice。这个是可以配置多种错误级别的,nginx的错误级别分为:debug | info | notice | warn | error | crit | alert | emerg。...同我们开发的时候关注日志差不多,error | crit | alert | emerg 关注error以及以上的错误消息就可以了。如何严谨一些,也可以将warn提示的警告信息进行解决。...上面的消息只是告诉我们服务器进行了重启而已。...PS:如果你的nginx的error中有很多很多的消息和日志。例如warn也有不少那么,我们就很有必要进行优化配置了。 大量的warn只能说明我们有部分配置不符合规范,可能造成了额外的性能开支。

    15.8K30

    消息队列(1)--如何避免丢消息,积压消息

    G0 消费了哪些消息,G1 是不知道的,也不用知道。G0 消费过的消息,G1 还可以消费。即使 G0 积压了很多消息,对 G1 来说也没有任何影响。...至于如何分配,这里面有很多策略,我就不展开说了。总之保证每个队列分配一个消费者就行了。...为了保证消息可靠,Broker和消费者都会存在重复消息,并且按着MQTT消息的质量标准要求,我们大部分的消息队列中间件采用At least once语义,Broker无法去除重复消息,只能依靠消费者在业务层进行幂等处理从对系统的影响结果来说...,开始执行“账户增加 100 元”;t1 时刻:Consumer B 收到条消息,检查消息执行状态,发现消息未处理过,因为这个时刻,Consumer A 还未来得及更新消息执行状态。...这样就会导致账户被错误地增加了两次 100 元,这是一个在分布式系统中非常容易犯的错误,一定要引以为戒。

    1.3K11

    如何使用消息队列的事务消息

    1 MQ事务的意义 “发消息”过程,往往是为通知另外一个系统更新数据,MQ的“事务”,主要解决消息生产者和消息消费者的数据一致性问题。...第二步发送半消息第三步创建订单,这2个顺序反一下是等价的,即先创建订单在发送半消息。 半消息并非消息内容不完整,包含的就是完整的消息内容。...订单创建成功,提交事务消息,购物车系统即可消费到该消息,继续后续流程 订单创建失败,回滚事务消息,购物车系统不会收到该消息 这就基本实现“都成功/失败”的一致性要求。...消费端做幂等处理来保障消息不会重复消费 可以采用状态机的方式 消息数据唯一键+redis setnx来保障 本地消息表,要确保插入本地消息表和执行消息消费业务在同一事务里 RocketMQ分布式事务 RocketMQ...消息对消费者不可见,将其消息的主题topic和队列id修改为half topic,原先的主题和队列id也做为消息的属性,如果事务提交或者回滚会将其消息的队列改为原先的队列。

    3K10

    关于 IMSDK 的几种消息的解释和对应接口

    离线消息, 即未读消息 离线消息是指未在客户端已读的消息, 即时通信 IM 支持离线消息缓存,即当用户不在线时,下次登录仍会拉取到离线消息, 通过 OnNewMessage 抛出....默认情况下,一个终端通过 SDK 把离线消息拉取到本地后,即时通信 IM 服务器便会删除这些离线消息. 从业务功能看未读消息的同步....可以解释为从云端拉取历史消息, 接口为 getMessage 最近联系人消息 最近联系人消息类似 QQ 的最近联系人列表中,可展示最近跟用户联系过的用户以及最后一条消息。...SDK 接口为 getConversationList 历史消息 历史消息主要指本地的历史消息, 可以解释为从本地数据库中获取历史消息.接口为 getLocalMessage 如果不希望某消息能够从历史中拉到..., 可以发在线消息(即用户在线时收到消息,如果用户不在线,下次登录也不会看到消息,可用于通知类消息,这种消息不会进行存储,也不会计入未读计数), 在线 sendOnlineMessage

    2.1K30

    如何保障消息中间件100%消息投递成功?如何保证消息幂等性?

    如上图: (1)订单服务投递消息给MQ中间件 (2)物流服务监听MQ中间件消息,从而进行消费 我们这篇文章讨论一下,如何保障订单服务把消息成功投递给MQ中间件,以RabbitMQ举例。...我们如何作才能保障一定会持久化到磁盘上面呢? 四、confirm机制 上面问题出现在,没有人告诉我们持久化是否成功。...第一:我们是否需要把业务结果进行数据落库,如果落库,关键解决的问题时数据库和redis操作如何做到原子性? 这个意思就是库存减1了,但redis进行操作完成标记时,失败了怎么办?...也就是一定要保证落库和redis 要么一起成功,要么一起失败 第二:如果不进行落库,那么都存储到缓存中,如何设置定时同步策略?...这个意思就是库存减1,不落库,直接先操作redis操作完成标记,然后由另外的同步服务进行库存落库,这个就是增加了系统复杂性,而且同步策略如何设置

    95130

    消息队列:Rabbitmq如何保证不丢消息

    如此以来,整个过程就分成了三大场景: 场景1: 生产者与exchange的上报消息,如何保证不丢失?...(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会将消息写入磁盘之后发出,broker回传给生产者的确认消息中deliver-tag域包含了确认消息的序列号...confrim方式使用的API: https://godoc.org/github.com/streadway/amqp#Channel.Confirm 场景2: 消费者从queue中获取消息如何保证不丢失...参考文章:https://blog.csdn.net/u013256816/article/details/60875666 场景3: rabbitmq内部如何保证不丢失消息?...问题1:一旦消费者长时间不回复Ack消息或者消费者卡死了呢,这种场景如何处理?

    2K20

    如何选择消息队列?

    消息队列这么多,到底该选择哪款消息队列呢? 选择消息队列的基本标准 虽然这些消息队列在功能和特性方面各有优劣,但我们在选择的时候要有一个基本标准。 首先,必须是开源的产品。...最后,作为一款及格的消息队列,必须具备的几个特性包括: •消息的可靠传递:确保不丢消息;•Cluster:支持集群,确保不会因为某个节点宕机导致服务不可用,当然也不能丢消息;•性能:具备足够好的性能,能满足绝大多数场景的性能要求...2.RabbitMQ 的性能是这几个消息队列中最差的,大概每秒钟可以处理几万到十几万条消息。如果应用对消息队列的性能要求非常高,那不要选择 RabbitMQ。...在了解了上面这些开源消息队列各自的特点和优劣势后,对于消息队列及相关技术选型,相信你会有更深入的理解和认识。...以下几条选择的建议可以参考: •如果消息队列不是将要构建系统的重点,对消息队列功能和性能没有很高的要求,只需要一个快速上手易于维护的消息队列,建议使用 RabbitMQ。

    1.5K30

    如何选择消息队列?

    消息队列这么多,到底该选择哪款消息队列呢? 选择消息队列的基本标准 虽然这些消息队列在功能和特性方面各有优劣,但我们在选择的时候要有一个基本标准。 首先,必须是开源的产品。...最后,作为一款及格的消息队列,必须具备的几个特性包括: •消息的可靠传递:确保不丢消息;•Cluster:支持集群,确保不会因为某个节点宕机导致服务不可用,当然也不能丢消息;•性能:具备足够好的性能,能满足绝大多数场景的性能要求...2.RabbitMQ 的性能是这几个消息队列中最差的,大概每秒钟可以处理几万到十几万条消息。如果应用对消息队列的性能要求非常高,那不要选择 RabbitMQ。...在了解了上面这些开源消息队列各自的特点和优劣势后,对于消息队列及相关技术选型,相信你会有更深入的理解和认识。...以下几条选择的建议可以参考: •如果消息队列不是将要构建系统的重点,对消息队列功能和性能没有很高的要求,只需要一个快速上手易于维护的消息队列,建议使用 RabbitMQ。

    1.5K20
    领券