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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yb1314111/article/details/88952558

在线直播源码中,礼物功能的开发是必不可少的,它不但可以作为用户对主播的喜爱度的评判标准,还是直播平台变现的方式之一,那么在直播源码中,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格式礼物动画的大致实现过程。更多与视频直播软件开发行业相关的资讯和分析会在以后逐渐放出,敬请期待,需要的朋友请关注我。
声明:文章为原创内容,转载请注明原文链接及作者

展开阅读全文

没有更多推荐了,返回首页