精华内容
下载资源
问答
  • 需要一个触手tv弹幕软件做的

    千次阅读 2018-06-30 20:09:53
    需要自动发弹幕的 拉关注的
    需要自动发弹幕的  拉关注的
    展开全文
  • 需求西瓜视频直播互动弹幕软件开发,有可以做的安全交易麻烦回复下</p>
  • “讲个笑话,程序员UI。” 前言跳过废话,直接看正文近些年来,弹幕这种实时视频评论越来越火爆,国内几乎所有的视频网站在...经过搜索,我发现确实有一些软件能够实现在观看离线视频与弹幕的功能,比较出名的有Bi

    “讲个笑话,程序员做UI。”

    前言

    跳过废话,直接看正文

    近些年来,弹幕这种实时视频评论越来越火爆,国内几乎所有的视频网站在播放器中开始加入了弹幕的功能。弹幕已经成了很多人观看视频时不可缺少的一部分,我也是其中之一。

    只是有时候因为网络问题、在线视频资源缺失等原因,人们通常会在本地观看离线视频,这时候要想看弹幕就有些麻烦了。经过搜索,我发现确实有一些软件能够实现在观看离线视频与弹幕的功能,比较出名的有BiliLocal以及DanDanPlayer这两个,在本质上,他们都是本地视频播放器,并通过在线搜索从各个弹幕网站下载弹幕资源并嵌入视频进行播放,都做的相当不错,只是在操作上有些麻烦,且都限制用户必须使用该播放器。

    因此,我就用swing写了这个小工具,它不是视频播放器,而是专门用来播放弹幕文件的弹幕播放器,能够与视频播放器一起配合为用户提供离线观看视频以及弹幕的功能。

    当然,这多少还是有重造车轮之嫌,毕竟嵌入弹幕的视频播放器也能够达到相同的效果,且集成的很好。只是对于程序员来说,用自己写的工具会更爽一些吧。这个东西写起来也就一两天的时间,就当做对swing编程的学习过程了。


    正文

    目录

    开发环境

    • 操作系统:windows7
    • 语言:Java
    • 界面工具包:Swing
    • 开发工具:IntellIj IDEA 2016.2.4
    • 版本管理:git
    • 运行环境:windows7、8、10

    软件架构

    软件需要支持下面几种功能:

    (1)根据url下载弹幕网站的弹幕文件
    (2)加载离线弹幕文件并播放
    (3)弹幕窗口置顶且背景透明
    (4)基本的播放器控制功能(时间轴、暂停、播放)

    我个人因为实习经历以及实验室项目的原因,参与开发了几个网站项目,因此对MVC框架比较熟悉,但是后来简单接触了下MVP模式,虽然是基于MVC的简单修改,但是个人觉得就代码解耦而言,MVP比MVC做得更好,因此就采用了MVP架构模式。当然,因为这是个小项目,为了节省时间,没有严格地按照MVP的架构来设计,(略去了Presenter 与View之间的接口层、减少了Presenter的数量等),但对此项目而言影响不大。

    在此列出整个项目的文件结构图:

    项目的文件结构图

    项目展示

    弹幕控制器:

    弹幕控制器

    弹幕主窗口:

    弹幕主窗口

    对此项目的源码感兴趣的朋友可以直接看我的git仓库

    一些问题

    我对swing还不太熟悉,因此在开发过程中遇到了一些问题,有些已经解决,有些还没有解决,现在列出一些比较关键的供大家参考:

    • 弹幕主窗口要实现背景透明但文字不透明的效果

    这个在windows下可以调用AWTUtilities中的相关函数实现,具体代码如下所示:

    public class TransparentWindow extends JFrame {
    
    public TransparentWindow(int width, int height) {
            this.setSize(width, height);
            this.setUndecorated(true);
            AWTUtilities.setWindowOpaque(this, false);
        }
    }

    但这个方法在windows中可以正常工作,在linux中可能就不行了,具体是怎样的效果要看linux使用的图形桌面环境(GNOME下背景是透明的,但是文字飘过后会留下痕迹,重绘也不行。)

    • 爬取弹幕网站的弹幕文件

    因为没有统一的标准,每个网站的弹幕文件格式也不一样,需要自己定义一个格式,然后将不同来源的弹幕文件转换到这个格式即可

    此外,在第一次写爬方法时,我发现下载下来的xml文件是乱码,后来才知道原来是经过deflate算法压缩的,需要进行解压缩,关键代码如下所示(使用apache的httpclient库获取HttpEntity):

    private static HttpEntity decompressingEntityIfNecessary(HttpEntity entity)
    {
        HttpEntity retEntity = entity;
        if (entity != null && entity.getContentEncoding() != null) {
            if ("gzip".equalsIgnoreCase(entity.getContentEncoding().getValue())) {
                retEntity = new GzipDecompressingEntity(entity);
            } else if ("deflate".equalsIgnoreCase(entity.getContentEncoding().getValue())) {
                retEntity = new DeflateDecompressingEntity(entity);
            }
        }
        return retEntity;
    }
    • 时间轴控制

    这个还是第一次写,使用Timer来实现,遇到不少坑,最终效果还凑活。具体可以参考项目中的TimePanel.java文件

    • 未解决的奔溃问题

    程序在windows10上正常运行,但在windows7下运行1分钟左右后会报APPCRASH

    故障模块名称: ltc_game64-116096.dll
    故障模块版本: 1.0.0.1
    故障模块时间戳:    57cf505f
    异常代码:   c000041d

    具体原因不明,有了解的朋友希望能够指点一下,感激不尽。

    后记

    弹幕这种东西在将来或许能够规范化,成为一种与字幕类似的视频资源。这样每个视频都有对应的弹幕资源库,各种播放器也就能够从不同的弹幕资源库中加载并播放了。

    展开全文
  • 算是交作业了用到的软件:Chrome Python+pycharm (vs code或者其他ide都可以不过pycharm实在是太香了)展示成果 62播放的水视频有了1600+弹幕第一步抓取post(这里就拿大佬视频实验,视频由于发弹幕必须账号登录所以...

    这是根据刚入b站的大佬@小段不二 的av83610261写的,算是交作业了

    用到的软件:Chrome Python+pycharm (vs code或者其他ide都可以不过pycharm实在是太香了)

    展示成果 62播放的水视频有了1600+弹幕

    第一步抓取post(这里就拿大佬视频做实验,视频由于发弹幕必须账号登录所以不在研究不登录账户的情况)

    老办法chrome打开一个视频播放一段时间然后按f12 network preseve log可以不用勾选()防止刷新掉图2

    然后随意发一个弹幕(务必遵守弹幕礼仪),然后一个无比明显的post请求点开它图3

    图4

    忽略爆头直接看发送的内容,很明显msg是发送的弹幕内容,aid是视频av号,color跟fpngtsise是弹幕属性,至于其他的progress应该是进度,我们用控制变量法验证下,再发一条不同时间,不同属性的弹幕分别试验下:在58秒处按原格式弹幕的发送值

    在58秒发送的同类型弹幕中只有progress变化,根据数值含义推断出这个值为发送的毫秒数

    顶部弹幕

    顶部弹幕只有mode改变成了5,说明这个是弹幕类型

    至于后面的大家可以自己去试,不过有两个定值type跟csrf,我猜测第一个是客户端类型(区分手机跟网页端)第二个是本地的随机值,我在之后去掉后发送仍能成功

    确定数据值含义后就开始python实现了

    post在请求右键->copy->copy to cULR然后粘贴到https://curl.trillworks.com/#网站上每一个程序员的必备技能ctry c & ctry v

    把生成的py代码复制,稍加修改并打印返回值ctry v yes

    进行测试,返回值无错误,刷新后弹幕也出现了返回结果

    弹幕

    并且弹幕出现时间正确 (124983ms≈124s=2m04s)

    到此结束,不过频繁的发送会返回错误,另外本文是用于学习交流,请各位遵守弹幕礼仪,不要用来做一些奇怪的事情,本人测试用的弹幕已尽可能的撤回(有两条超过两分钟了无法撤回实在是抱歉),最后再次感谢@

    展开全文
  • 最近公司新需求, 原来用弹幕库, 已经无法满足需要. 迫不得已自己写了一套弹幕库OCBarrage. 这套弹幕库轻量, 可拓展, 高度自定义, 超高性能, 简单易上手. 无论哪家公司软件的性能绝对是衡量APP好坏重要指标....

    最近公司做新需求, 原来用的老弹幕库, 已经无法满足需要. 迫不得已自己写了一套弹幕库OCBarrage. 这套弹幕库轻量, 可拓展, 高度自定义, 超高性能, 简单易上手. 
    无论哪家公司软件的性能绝对是衡量APP好坏的重要指标. 之前有一次开会, 我们领导说:”我们写的东西, 有哪些是可以拿的出手,让我们引以为豪的?”. 之前还真就得想一会儿, 现在可以毫不犹豫的说我们的弹幕库绝对是一个好家伙. 
    做直播类软件核心功能一个是播放器另一个就是弹幕了. 现在iOS开源的弹幕库性能好的不多, 弹幕量稍微大一点, 或者弹幕稍微复杂一点, 就会出现卡顿,这与它的底层实现, 设计策略以及你的使用方法都有关系. 关键是动画单一,无法定制,满足不了动画的多样化需求!OCBarrage正是为解决这些问题而生的! 
    OCBarrage底层使用Core Animation驱动, Core Graphics绘图, GPU渲染, 性能极高, 哪怕是同时渲染5000条弹幕也不会感觉到卡顿. 开源地址:https://github.com/w1531724247/OCBarrage 
    (以下测试基于iPhone7真机)

    普通弹幕量.gif

    同时渲染2000条弹幕.gif

    同时渲染4000条弹幕.gif

    同时渲染5000条弹幕.gif

    对于全民直播这样的平台来说,在大主播高峰时期的弹幕量是很大的,特别是当主播说一句:“我们现在开始弹幕抽奖”。弹幕量瞬间就会涨的很高!所以对弹幕这一块的要求还是蛮高的.

    性能优化原理

    弹幕渲染时比较耗性能的点: 
    1. ######弹幕阴影 
    主播在户外直播时偶尔会有白色的背景, 而弹幕文字的颜色也是白色的, 这个时候弹幕飘到直播画面的白色区域会导致看不到文字内容. 为了解决这个问题我们通常会给弹幕文字添加一个隐影.以防止这种情况的发生. 然而别小看这几个像素阴影, 它可是性能消耗的大户. 哪怕是用GPU渲染因为是动态的实时的所以也相当吃性能. 在实验的过程中发现如果有文字阴影几十条弹幕就会出现弹幕卡顿, 结果就是弹幕抖动一跳一跳的. 
    解决办法就是用NSAttributeStringNSStrokeColorAttributeName属性设置文字的轮廓颜色替换文字阴影.效果对比如下: 
    text_shadow.png

    text_stroke.png

    都能解决我们的问题, 但是性能差的可不是一丁半点. 
    2. ######用CALayer替代UIView展示 
    与UIView相比CALayer更轻量. 性能更好.系统提供的组件为了保证其通用性, 难免有些冗余.这就是我们优化的空间. 
    3. ######弹幕文字下面的渐变色背景 
    彩色弹幕下面的渐变色背景如果用CAGradientLayer实现也是比较耗性能的, 但是如果是用图片呈现的话效果就会好的多, 但是不够灵活, 没关系, 我们都一并解决了. 
    4. ######将内容合成一张图片展现 
    将所有的内容呈现在layer上并布局好位置以后将所有的内容合成一张图片展现在barrageCell的layer上, 并删除所有的子subview及sublayer, 以提高性能.

    基础类

    OCBarrageManager

    图片.png 
    提供了弹幕渲染视图并负责弹幕引擎的启动, 暂停, 继续及停止. 
    renderView:弹幕呈现的视图. 
    renderStatus:renderView的状态, 开始, 暂停, 结束. 
    - (void)resgisterBarrageCellClass:(Class)barrageCellClass withBarrageIndentifier:(NSString *)barrageIndentifier;
    注册cell类型, 在调用- (void)renderBarrageDescriptor:(OCBarrageDescriptor *)barrageDescriptor;方法的时候会根据barrageDescriptor的barrageIndentifier去自动去缓存池中取一个注册的与barrageDescriptor的barrageIndentifier相同的cell.并将传入的barrageDescriptor赋值给cell的barrageDescriptor属性. 
    - (void)start;:允许接收并渲染弹幕 
    - (void)puase;:暂停弹幕动画. 如果弹幕正在运动则会暂停在当前位置, 并且不会渲染并丢弃新收到的弹幕. 
    - (void)resume; :继续弹幕动画, 并渲染新收到的弹幕. 
    - (void)stop;: 清空当前正在动画的弹幕, 并停止接收渲染新的弹幕.

    OCBarrageDescriptor

    图片.png 
    OCBarrageDescriptor是负责传递弹幕数据的类, 通过barrageIndentifier找到对应的OCBarrageCell并将数据展示在OCBarrageCell上. 
    positionPriority:属性决定了弹幕渲染之后在视图层次上所处的位置, 因为经常会有一些比较重要的弹幕不希望被普通弹幕覆盖, 这个时候可以将重要弹幕的positionPriority设置的高一点, 这样重要弹幕就可以渲染在普通弹幕的上方而不会被普通弹幕覆盖. 
    animationDuration:动画时间, 这条弹幕从开始到结束的总时间. 
    touchAction:弹幕被点击时候执行的动作. 
    bindingOriginY:本条弹幕在渲染的时候将frame.origin.y固定在bindingOriginY的位置.>=0时生效. 可以固定弹幕Y坐标的位置.

    OCBarrageCell

    图片.png 
    呈现弹幕数据的视图. 
    idle:是否是空闲状态, 如果正在运动则为NO, 如果正在缓存池中等待被复用则为YES. 
    idleTime:弹幕动画执行完毕后的时间点. 弹幕动画执行完毕后当前cell会被放进缓存池等待下次复用减少cell创建释放的性能开销. 如果超过5秒没有被复用则会被释放回收内存, 减少内存占用. 
    barrageIndentifier:标识符. 通过这个属性与OCBarrageDescriptor类绑定. 与OCBarrageDescriptorbarrageIndentifier对应. 
    barrageDescriptor:当前展示的OCBarrageDescriptor. 
    barrageAnimation:当前cell所执行的动画. 
    trackIndex当前cell所在的弹幕轨道的索引. 
    - (instancetype)initWithBarrageIndentifier:(NSString *)barrageIndentifier;:根据传入的barrageIndentifier创建一个实例. 
    - (void)addBarrageAnimationWithDelegate:(id<CAAnimationDelegate>)animationDelegate;: 子类可以通过重写这个方法为当前cell添加自定义的动画类型.animationDelegate默认为OCBarrageRenderView, 可以监听动画执行完毕的事件以便将cell放入缓存池等待下次复用. 
    - (void)updateSubviewsData;:在这个方法里给cell的各个子视图赋值. 也可以在- (void)setBarrageDescriptor:(OCBarrageDescriptor *)barrageDescriptor方法里给子视图复制. 在这个方法调用以后可以计算一下子视图的的大小及位置.. 也可以在 - (void)layoutSubviews设置子视图的大小及位置. 
    - (void)clearContents;设置数据前清空一下上次展示的遗留内容. 
    - (void)sizeToFit;:根据子视图的边界自适应大小. 
    - (void)convertContentToImageWithSize:(CGSize)contentSize;: 将当前cell上的子视图的内容绘制成一张图片, 并将生成的图片赋值给当前cell的layer的contents属性展现出来. 这个方法要在设置完数据和布局完子视图的位置之后调用. 这个方法会自动调用- (void)layoutSubviews因此不可以在layoutSubviews里调用这个方法不然后造成死循环. 图片生成之后这个方法会执行removeAllSubViewsAndSublayers

    图片.png

    删除当前cell上所有的子视图以及子layer以优化展示性能.所以不希望被删除的视图或者layer请在这个方法调用之后添加, 在这个方法执行之后建议将子layer或者子view设置为nil以回收内存. 
    图片.png

    • - (void)prepareForReuse;: 在复用之前要进行的操作可以放在这个方法里执行, 在重写这个方法的时候记得调用一下[super prepareForReuse];.
    OCBarrageRenderView

    图片.png 
    animatingCells: 正在运动的弹幕cell的数组. 
    idleCells: 弹幕动画执行完毕后等待复用的弹幕cell的数组. 
    renderPositionStyle: 新出生的弹幕的位置OCBarrageRenderPositionRandomTracks, 有弹幕轨道, 新出生的弹幕随机展示在其中一条轨道上, 并且尽量不覆盖在还没呈现完整的正在出来的弹幕上-默认类型.OCBarrageRenderPositionRandom没有弹幕轨道, y坐标完全随机.OCBarrageRenderPositionIncrease有弹幕轨道, y坐标循环递增. 
    renderStatus: 引擎状态正在OCBarrageRenderStoped, 不接收不渲染新弹幕. OCBarrageRenderStarted接受并渲染新弹幕.OCBarrageRenderPaused暂停中, 不接收不渲染新弹幕, 已经渲染的弹幕停留在当前所处的位置. 
    - (void)resgisterBarrageCellClass:(Class)barrageCellClass withBarrageIndentifier:(NSString *)barrageIndentifier;: 同OCBarrageManager- (void)resgisterBarrageCellClass:(Class)barrageCellClass withBarrageIndentifier:(NSString *)barrageIndentifier;
    - (nullable OCBarrageCell *)cellWithBarrageIndentifier:(NSString *)barrageIndentifier;: 根据传入的barrageIndentifier从缓存池或者注册的cell列表中返回一个cell. 
    - (void)fireBarrageCell:(OCBarrageCell *)barrageCell;: 发射弹幕. 
    - (void)start;: 同OCBarrageManager
    - (void)puase;: 同OCBarrageManager
    - (void)resume;: 同OCBarrageManager
    - (void)stop;: 同OCBarrageManager.

    OCBarrageTrackInfo

    图片.png 
    弹幕轨道信息类. 
    trackIndex: 弹幕轨道所在的位置. 
    trackIdentifier: 弹幕轨道标识符, 不同类型的弹幕, 不重用同一条轨道. 
    nextAvailableTime:下次可用时间, 主要是用来防止某条轨道上刚出现了一条弹幕还没有完全展现在屏幕上, 后面这条轨道上就又来了一条弹幕盖在之前的那个弹幕上, 影响用户体验. 
    barrageCount: 当前轨道的弹幕数量.

    当然写到这里依然还有优化的空间, 后续会继续优化, 欢迎各位仁人志士共同探讨指点. 
    开源地址:https://github.com/w1531724247/OCBarrage

    from:https://blog.csdn.net/w1531724247/article/details/77619111

    展开全文
  • js制作简易视频弹幕

    2020-12-09 14:31:59
    制作原因:大家在直播或者视频软件上应该常常看见各种弹幕,我想大家应该也想知道弹幕是怎么出来,那么我们今天一起来制作一下简易弹幕。 主体思路:简易弹幕原理就是将用户输入文字存储到一个标签(我用是...
  • qt实现桌面弹幕

    千次阅读 2017-08-31 15:41:56
    qt是一个跨平台C++图形用户界面应用程序开发框架,应用软件的图形拿qt来是效率很快,今天来实现一下桌面弹幕 首先完成一个弹幕类,共有继承于QLabel class barrage : public QLabel { Q_OBJECT public: ...
  • 今天我将分享由BiliBili开源Android弹幕框架(DanmakuFlameMaster)学习经验。 我是将整个框架以model形式引入项目中,这样更方便观察源码。也可以通过依赖方式注入进来 dependencies { compile '...
  • 但网站并没有提供下载视频及弹幕的方法,通过浏览器以及其它的嗅探器可以得到下载地址,但是十分繁琐,且下载下来在本地很难播放,虽然有一些网友了基于flash的本地播放器,但其效率和方便性皆不尽人意。...
  • 她支持划词翻译,单词高亮,单词弹幕,记忆曲线复习,词频统计... 内容列表 背景 作为开发者,虽然日常总是与英语打交道,但通常是带有深刻目的性。 因此,在解决技术问题或学习新技能过程里,遇到模陌生单词...
  • 2015年起,全国刮起了移动直播风,大大小小直播软件直播系统开发竞相爆发,直播睡觉、直播吃火锅、等...但当观众通过弹幕与主播进行互动时,我们发现弹幕到得到主播响应可能要经过 5s 甚至更长时间,虽然主播看到
  • 说起来之前也推荐了不少小程序了,不过有很多...无需软件,只需一个小程序,你也可以简单拥有一个弹幕,字体颜色、大小及速度都能设置,让你时刻都能打Call。 第二个推荐:丁香医生,人生在世,总会出
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 关于bilibili评价

    2018-12-16 22:36:00
    众所周知,哔哩哔哩是当代年轻人潮流软件,很多年轻人使用哔哩哔哩很多事情。可以发视频,可以看视频,也可以直播;而最吸引人们便是在所有直播,小视频等等视频上都可以即时发表自己想发表的弹幕穿插到...
  • 内容优化和浏览会留给下一个软件处理。 [目录] 支持内容 视频 评论(也支持其他评论区,详见下) 分P信息 统计信息(评论数,点赞数……) 简介 标签 用户空间 动态 统计信息(播放量,点赞数……) 收藏夹...
  • Bilibili 直播姬-crx插件

    2021-04-06 16:46:14
    配合弹幕接口功能,可以做出更自定义更丰富的弹幕互动直播场景,例如弹幕点歌、弹幕点电影和语音朗读弹幕这些小玩意,甚至还可以弹幕写文章或者弹幕玩页游等等,全都能在你网页用js实现。为什么还需要Node.js呢,...
  • 配合弹幕接口功能,可以做出更自定义更丰富的弹幕互动直播场景,例如弹幕点歌,弹幕点电影和语音朗读弹幕这些小玩意,甚至还可以弹幕写文章弹幕玩页游等等,全都能在你网页用js实现。 为什么还需要Node.js呢,因为...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 直播带货系统风潮居高不下,目前效率最高带货方式好像就是最近极其火爆直播了,这种新形式入场让用户在观看直播带货时很有现场感,还有实时的弹幕互动,像有魔力似激起用户购物欲望。接下来本文看看直播...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...
  • 当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app,发现输入弹幕的交互并不友好。最直接的体验就是,微信比绝大部分IM软件在聊天场景下输入法与表情面板频繁切换时表现得更为平滑,不会给用户很突兀...

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

做弹幕的软件