欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在视频直播软件开发中,这样做才能实现svga格式礼物动画

程序员文章站 2022-03-02 19:45:07
...

在线直播源码中,礼物功能的开发是必不可少的,它不但可以作为用户对主播的喜爱度的评判标准,还是直播平台变现的方式之一,那么在直播源码中,svga格式礼物动画是如何实现的呢?以云豹的金山demo为例,实现直播demo中播放svga格式礼物动画的大致流程如下:
1.在build .gradle中添加JitPack .io,如下。

maven { url "https://jitpack.io" }

2.添加依赖,具体如下。

//svga
compile 'com.github.yyued:SVGAPlayer-Android:2.4.0'

3.在布局文件中添加相应的布局,部分代码如下,其中autoPlay属性指加载后是否自动播放,默认值为true。loopCount属性指循环播放次数,默认值为0意指循环播放。

<com.opensource.svgaplayer.SVGAImageView
    android:id="@+id/gift_svga"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:scaleType="centerCrop"
    app:autoPlay="true"
    app:loopCount="1"
    />

4、通过id引用布局中的SVGAImageView,首先通过ConcurrentLinkedQueue队列将收到svga格式的礼物链接存起来,然后按顺序播放,svga动画播放时,先通过SVGAParser的decodeFromInputStream方法解析,监听解析成功回调生成的SVGAVideoEntity,然后开始播放一个svga礼物动画,此外还需添加动画是否完成的监听,部分代码如下

//svagView
mSVGAImageView = svgaImageView;
//svag动画监听
mSVGAImageView.setCallback(new SVGACallback() {
   @Override
   public void onPause() {
   }
   @Override
   public void onFinished() {
       long diffTime = 4000 - (System.currentTimeMillis() - mSvgaPlayTime);
       if (diffTime < 0) {
           diffTime = 0;
       }
       if (mHandler != null) {
           mHandler.sendEmptyMessageDelayed(WHAT_GIF, diffTime);
       }
   }
   @Override
   public void onRepeat() {
   }
   @Override
   public void onStep(int i, double v) {
   }
});
/**
* 播放svga
*/
private void decodeSvga(File file) {
   if (mSVGAParser == null) {
       mSVGAParser = new SVGAParser(mContext);
   }
   if (mParseCompletionCallback == null) {
       mParseCompletionCallback = new SVGAParser.ParseCompletion() {
           @Override
           public void onComplete(@NotNull SVGAVideoEntity svgaVideoEntity) {
               if (mSVGAMap == null) {
                   mSVGAMap = new HashMap<>();
               }
               if (mTempGifGiftBean != null) {
                   mSVGAMap.put(mTempGifGiftBean.getGiftId(), new SoftReference<>(svgaVideoEntity));
               }
               playSVGA(svgaVideoEntity);
           }
           @Override
           public void onError() {
               mShowGif = false;
           }
       };
   }
   try {
       BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
       mSVGAParser.decodeFromInputStream(bis, file.getAbsolutePath(), mParseCompletionCallback, true);
   } catch (Exception e) {
       e.printStackTrace();
       mShowGif = false;
   }
}

以上便是在直播demo中播放svga格式礼物动画的大致实现过程。更多与视频直播软件开发行业相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。
声明:文章为原创内容,转载请注明原文链接及作者