精华内容
下载资源
问答
  • 开源IOS 客户端直播SDK自带美颜功能

    千次阅读 2016-08-25 15:30:08
    本文介绍一个:IOS 客户端直播的SDK,代码完全开源。 直播时代:让IOS普通开发者一天内做出一个RTMP直播客户端,并且带有美艳直播功能。(文章最下面有github源码地址) 包含一下功能: 1, 提供IOS苹果手机的...

    当前视频直播非常火爆,手机端的视频直播也非常火爆,PGC、UGC的视频直播门槛都降低了很多。

    本文介绍一个:IOS 客户端直播的SDK,代码完全开源。

    直播时代:让IOS普通开发者一天内做出一个RTMP直播客户端,并且带有美艳直播功能。(文章最下面有github源码地址)

    包含一下功能:

    1, 提供IOS苹果手机的RTMP推流;

    填写RTMP服务地址,直接就可以进行推流。

    2,美颜直播

    美不美都能装的直播,IOS OPENGL美艳加速,手机完全不发烫。

    3,前后摄像头随时切换

    4,提供RTMP连接状态的回调

    一,首先简单扫盲

    当前直播都是用RTMP协议,推流到RTMP服务器

    然后RTMP服务器提供RTMP视频服务;

    当然通常RTMP服务器也提供HLS,把视音频流切片成ts流,然后用户可以直接播放xxx.m3u8的流媒体

     

    二,SDK使用简介

    1,初始化

    [LiveVideoCoreSDK sharedinstance]:全局独立的SDK实例,你不用管理对象的申请和释放;

    初始化RTMP连接和视频参数,非常简单:

    [[LiveVideoCoreSDK sharedinstance] LiveInit:RtmpUrl Preview:self.view VideSize:LIVE_VIEDO_SIZE_CIF BitRate:LIVE_BITRATE_500Kbps FrameRate:LIVE_FRAMERATE_20];

    参数:

    RtmpUrl: rtmp服务器地址参数,如rtmp://192.168.30.191/live/123456

    Preview: IOS本地预览显示的UIVIEW对象,现在都喜欢全屏直播模式,这里直接用self.view

    VideSize: 视频分辨率。这里提供了几种视频分辨率,CIF(320*640),D1(540*960),720P(720*1280)

    BitRate: 视频码率。有500kbps对应CIF,800kbps对应D1, 2Mbps对应720p,怎么配置就看你手机当前的带宽情况了。

    FrameRate: 视频帧率。这个决定视频流畅程度,帧率越高越流畅。这里提供:15帧/s,20帧/s,25帧/s,20帧/s

    2,连接RTMP视频服务器

    [[LiveVideoCoreSDK sharedinstance] connect];

    调用这个接口后,开始打开iphone本地手机预览,并且开始连接RTMP服务器。

    如果网络没有问题,RTMP服务器没有问题,直播就开始了,简单吧!

    3,设置滤镜:提供美艳效果

    - (void)setFilter:(LIVE_FILTER_TYPE) type;

    当前提供了美白效果,设置一个LIVE_FILTER_BEAUTY这个参数,看看你有多美白。

    4,设置前后摄像头

    - (void)setCameraFront:(Boolean)bCameraFrontFlag;

    前后摄像头随时动态切换,想怎么拍就怎么拍。

    5,设置RTMP连接状态回调

    [LiveVideoCoreSDK sharedinstance].delete = self;

    在你的viewcontroller中实现协议:LIVEVCSessionDelegate,如下,这样你可以随时知道RTMP连接的状态了。

    //rtmp status delegate:

    - (void) LiveConnectionStatusChanged: (LIVE_VCSessionState) sessionState{

        dispatch_async(dispatch_get_main_queue(), ^{

            switch (sessionState) {

                case LIVE_VCSessionStatePreviewStarted:

                    _RtmpStatusLabel.text = @"RTMP状态: 预览未连接";

                    break;

                case LIVE_VCSessionStateStarting:

                    _RtmpStatusLabel.text = @"RTMP状态: 连接中...";

                    break;

                case LIVE_VCSessionStateStarted:

                    _RtmpStatusLabel.text = @"RTMP状态: 已连接";

                    break;

                case LIVE_VCSessionStateEnded:

                    _RtmpStatusLabel.text = @"RTMP状态: 未连接";

                    break;

                case LIVE_VCSessionStateError:

                    _RtmpStatusLabel.text = @"RTMP状态: 错误";

                    break;

                default:

                    break;

            }

        });

    }

    6,直播结束,断开rtmp连接

    [[LiveVideoCoreSDK sharedinstance] disconnect];简单吧,不解释了。

     

    GitHub地址: https://github.com/runner365/LiveVideoCoreSDK

    最后,如果觉得代码对你有帮助,请在github中帮助“star”,加个小星星。

    如果有问题,可以在我的问题区提问,欢迎交流

    展开全文
  • 直播SDK如何通过开源直播系统源码加入GPU自定义美颜 了解情况 查了SDK暴露出来的接口,跟系统AVFoundation的回调方法一致,直播SDK提供了Block回调,返回封装好的CMSampleBufferRef数据,然后在Block里把...

    直播SDK如何通过开源直播系统源码加入GPU自定义美颜

    了解情况

    查了SDK暴露出来的接口,跟系统AVFoundation的回调方法一致,直播SDK提供了Block回调,返回封装好的CMSampleBufferRef数据,然后在Block里把CMSampleBufferRef数据传输到SDK内部方法推流。

    - (void)processVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer {
      // do something 
     [[SDK sharedSDK].netCallManager sendVideoSampleBuffer:sampleBuffer];
    }
    复制代码

    大概思路:

    1. 取出图像数据CVPixelBufferRef,时间戳CMSampleTimingInfo
    2. 对CVPixelBufferRef进行美颜处理
    3. 重新封装CMSampleBufferRef发送到SDK方法内推流

    采取的美颜滤镜(非第三方SDK,支持Mac,iOS):

    • iOS自带的CIFilter (单一滤镜多,貌似没现成组合美颜滤镜)
    • 强大的GPUImage(有现成组合过成的GPUImageBeautifyFilter美颜滤镜,且Demo有各种效果预览)

    GPUImage用法 input -》do something -》output

    网上很多关于GPUImage的用法是对视频文件,或者直接用Camera作为输入源。缺少直接对一帧图像进行处理,所以问题在于如何对CVPixelBufferRef进行滤镜处理,然后得到处理完的CVPixelBufferRef数据。对为此特意查阅很多资料(参考的网址在最后),并翻了翻GPUImage的代码。

    • GPUImage Framework的文件很清晰,Sources输入源,Filters是各种滤镜,Outputs输出源。

      用法基本可以列为管道式,addTarget 相当于 -》: 
      [Sources初始化对象 addTarget:Filter]; // 输入源 -》滤镜
      [filter addTarget:output输出源对象];  // 滤镜 -》输出源	
      复制代码
    • 输入源采用GPUImageMovie,因为里面有一个- (void)processMovieFrame:(CMSampleBufferRef)movieSampleBuffer方法,支持输入一帧进行处理。(注意初始化Movie一定要用initWithAsset的方法,传入nil,否则内部的GPUImageContext不会初始化)

    • 滤镜采取已经组合成美颜滤镜的GPUImageBeautifyFilter,它是一个FilterGroup。

    • 输出的时候,使用GPUImageRawDataOutput,newFrameAvailableBlock里取出图像数据,屏幕一片灰色。如果用GPUImageView直接addSubview显示,能成功显示用滤镜处理过的画面。

    证明数据已经成功处理,在GPUImageMovie的processMovieFrame方法里也找到newFrameAvailableBlock的回调,回调确实有执行。

    问题则是我在lockFramebufferForReading和unlockFramebufferAfterReading中间读取帧数据的操作不对,想到这边读数据这么复杂,就想着这个渲染完的数据到底放在哪里了,有没有别的办法取出?

    在前面说过GPUImageBeautifyFilter是一个GPUImageFilterGroup,GPUImageFilterGroup的父类是GPUImageOutput,这就意味着,即使我不添加任何output的target,数据也是可以拿到的。

    再翻了下资料,GPUImageOutput的头文件,发现一个frameProcessingCompletionBlock,这个跟我原来的processMovieFrame好像很对应。网上也有说怎么从GPUImageOutput取出帧数据。那就行了,直接从GPUImageBeautifyFilter里取,不用设置output的Target,大功告成。

    代码代码代码

    **说了一堆废话,不好意思。献上代码:**GPUImageBeautifyFilter代码在参考链接的最后一个

        // 初始化Filter和GPUImageMovie
        _beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
    	_gpumovie = [[GPUImageMovie alloc] initWithAsset:nil]; // 初始化内部数据结构
    	[_gpumovie addTarget:_beautifyFilter]; //连接过滤器
    复制代码

    // 重新封装CMSampleBufferRef,并交给SDK推流
    // 如果是rtmp协议传输视频流,自己用VideoToolBox封装。
    - (void)sendVideoSampleBuffer:(CVPixelBufferRef)bufferRef time:(CMSampleTimingInfo)timingInfo  {
           CMSampleBufferRef newSampleBuffer = NULL;
           CMFormatDescriptionRef outputFormatDescription = NULL;
           CMVideoFormatDescriptionCreateForImageBuffer( kCFAllocatorDefault, bufferRef, &outputFormatDescription );
    	   OSStatus err = CMSampleBufferCreateForImageBuffer( kCFAllocatorDefault, bufferRef, true, NULL, NULL, outputFormatDescription, &timingInfo, &newSampleBuffer );
           if(newSampleBuffer) {
              [[SDK sharedSDK].netCallManager sendVideoSampleBuffer:newSampleBuffer];
           }else {
              NSString *exceptionReason = [NSString stringWithFormat:@"sample buffer create failed (%i)", (int)err];
              @throw [NSException exceptionWithName:NSInvalidArgumentException reason:exceptionReason userInfo:nil];
           }
    }
    复制代码

    最重要的处理部分:

    // 此方法由直播SDK负责回调或者代理执行
    // 自定义美颜时最好把直播SDK默认美颜关闭
    - (void)processVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer {
    
        CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    	//取出帧数据/时间戳 -》处理帧数据美颜 -》根据时间戳与像素数据重新封装包:
        [_gpumovie processMovieFrame:sampleBuffer]; // kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 可能需要检查
    
        CMSampleTimingInfo timingInfo = {
    		.duration               = CMSampleBufferGetDuration(sampleBuffer),
    		.presentationTimeStamp  =   CMSampleBufferGetPresentationTimeStamp(sampleBuffer),
            .decodeTimeStamp        = CMSampleBufferGetDecodeTimeStamp(sampleBuffer)
        };
        __weak typeof(self) weakSelf = self;
        [_beautifyFilter setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime time) {
     		GPUImageFramebuffer *imageFramebuffer = output.framebufferForOutput;
      		glFinish();
    		[weakSelf sendVideoSampleBuffer: [imageFramebuffer getRenderTarget] time:timingInfo];
    	 }];
    }

     

    展开全文
  • 本文介绍一个:IOS 客户端直播的SDK,代码完全开源。 直播时代:让IOS普通开发者一天内做出一个RTMP直播客户端,并且带有美艳直播功能。(文章最下面有github源码地址) 包含一下功能: 1, 提供IOS苹果手机的RTMP推...

    当前视频直播非常火爆,手机端的视频直播也非常火爆,PGC、UGC的视频直播门槛都降低了很多。

    本文介绍一个:IOS 客户端直播的SDK,代码完全开源。

    直播时代:让IOS普通开发者一天内做出一个RTMP直播客户端,并且带有美艳直播功能。(文章最下面有github源码地址)

    包含一下功能:

    1, 提供IOS苹果手机的RTMP推流;

    填写RTMP服务地址,直接就可以进行推流。

    2,美颜直播

    美不美都能装的直播,IOS OPENGL美艳加速,手机完全不发烫。

    3,前后摄像头随时切换

    4,提供RTMP连接状态的回调

    一,首先简单扫盲

    当前直播都是用RTMP协议,推流到RTMP服务器。

    然后RTMP服务器提供RTMP视频服务;

    当然通常RTMP服务器也提供HLS,把视音频流切片成ts流,然后用户可以直接播放xxx.m3u8的流媒体。

     

    二,SDK使用简介

    1,初始化

    [LiveVideoCoreSDK sharedinstance]:全局独立的SDK实例,你不用管理对象的申请和释放;

    初始化RTMP连接和视频参数,非常简单:

    [[LiveVideoCoreSDK sharedinstance] LiveInit:RtmpUrl Preview:self.view VideSize:LIVE_VIEDO_SIZE_CIF BitRate:LIVE_BITRATE_500Kbps FrameRate:LIVE_FRAMERATE_20];

    参数:

    RtmpUrl: rtmp服务器地址参数,如rtmp://192.168.30.191/live/123456

    Preview: IOS本地预览显示的UIVIEW对象,现在都喜欢全屏直播模式,这里直接用self.view

    VideSize: 视频分辨率。这里提供了几种视频分辨率,CIF(320*640),D1(540*960),720P(720*1280)

    BitRate: 视频码率。有500kbps对应CIF,800kbps对应D1, 2Mbps对应720p,怎么配置就看你手机当前的带宽情况了。

    FrameRate: 视频帧率。这个决定视频流畅程度,帧率越高越流畅。这里提供:15帧/s,20帧/s,25帧/s,20帧/s

    2,连接RTMP视频服务器

    [[LiveVideoCoreSDK sharedinstance] connect];

    调用这个接口后,开始打开iphone本地手机预览,并且开始连接RTMP服务器。

    如果网络没有问题,RTMP服务器没有问题,直播就开始了,简单吧!

    3,设置滤镜:提供美艳效果

    - (void)setFilter:(LIVE_FILTER_TYPE) type;

    当前提供了美白效果,设置一个LIVE_FILTER_BEAUTY这个参数,看看你有多美白。

    4,设置前后摄像头

    - (void)setCameraFront:(Boolean)bCameraFrontFlag;

    前后摄像头随时动态切换,想怎么拍就怎么拍。

    5,设置RTMP连接状态回调

    [LiveVideoCoreSDK sharedinstance].delete = self;

    在你的viewcontroller中实现协议:LIVEVCSessionDelegate,如下,这样你可以随时知道RTMP连接的状态了。

    //rtmp status delegate:

    - (void) LiveConnectionStatusChanged: (LIVE_VCSessionState) sessionState{

        dispatch_async(dispatch_get_main_queue(), ^{

            switch (sessionState) {

                case LIVE_VCSessionStatePreviewStarted:

                    _RtmpStatusLabel.text = @"RTMP状态: 预览未连接";

                    break;

                case LIVE_VCSessionStateStarting:

                    _RtmpStatusLabel.text = @"RTMP状态: 连接中...";

                    break;

                case LIVE_VCSessionStateStarted:

                    _RtmpStatusLabel.text = @"RTMP状态: 已连接";

                    break;

                case LIVE_VCSessionStateEnded:

                    _RtmpStatusLabel.text = @"RTMP状态: 未连接";

                    break;

                case LIVE_VCSessionStateError:

                    _RtmpStatusLabel.text = @"RTMP状态: 错误";

                    break;

                default:

                    break;

            }

        });

    }

    6,直播结束,断开rtmp连接

    [[LiveVideoCoreSDK sharedinstance] disconnect];简单吧,不解释了。

     

    GitHub地址: https://github.com/runner365/LiveVideoCoreSDK

    最后,如果觉得代码对你有帮助,请在github中帮助“star”,加个小星星。

    如果有问题,可以在我的问题区提问,欢迎交流。

    转载于:https://www.cnblogs.com/runner42/p/5241407.html

    展开全文
  • 本文介绍一个:IOS 客户端直播的SDK,代码完全开源。 直播时代:让IOS普通开发者一天内做出一个RTMP直播客户端,并且带有美艳直播功能。(文章最下面有github源码地址) 包含一下功能: 1, 提供IOS苹果手机的RTMP推流;...

    当前视频直播非常火爆,手机端的视频直播也非常火爆,PGC、UGC的视频直播门槛都降低了很多。

    本文介绍一个:IOS 客户端直播的SDK,代码完全开源。

    直播时代:让IOS普通开发者一天内做出一个RTMP直播客户端,并且带有美艳直播功能。(文章最下面有github源码地址)

    包含一下功能:

    1, 提供IOS苹果手机的RTMP推流;
    填写RTMP服务地址,直接就可以进行推流。

    2,美颜直播
    美不美都能装的直播,IOS OPENGL美艳加速,手机完全不发烫。

    3,前后摄像头随时切换
    4,提供RTMP连接状态的回调
    一,首先简单扫盲

    当前直播都是用RTMP协议,推流到RTMP服务器。

    然后RTMP服务器提供RTMP视频服务;

    当然通常RTMP服务器也提供HLS,把视音频流切片成ts流,然后用户可以直接播放xxx.m3u8的流媒体。

    二,SDK使用简介

    1,初始化

    [LiveVideoCoreSDK sharedinstance]:全局独立的SDK实例,你不用管理对象的申请和释放;

    初始化RTMP连接和视频参数,非常简单:

    [[LiveVideoCoreSDK sharedinstance] LiveInit:RtmpUrl Preview:self.view VideSize:LIVE_VIEDO_SIZE_CIF BitRate:LIVE_BITRATE_500Kbps FrameRate:LIVE_FRAMERATE_20];

    参数:

    RtmpUrl: rtmp服务器地址参数,如rtmp://192.168.30.191/live/123456

    Preview: IOS本地预览显示的UIVIEW对象,现在都喜欢全屏直播模式,这里直接用self.view

    VideSize: 视频分辨率。这里提供了几种视频分辨率,CIF(320640),D1(540960),720P(720*1280)

    BitRate: 视频码率。有500kbps对应CIF,800kbps对应D1, 2Mbps对应720p,怎么配置就看你手机当前的带宽情况了。

    FrameRate: 视频帧率。这个决定视频流畅程度,帧率越高越流畅。这里提供:15帧/s,20帧/s,25帧/s,20帧/s

    2,连接RTMP视频服务器

    [[LiveVideoCoreSDK sharedinstance] connect];

    调用这个接口后,开始打开iphone本地手机预览,并且开始连接RTMP服务器。

    如果网络没有问题,RTMP服务器没有问题,直播就开始了,简单吧!

    3,设置滤镜:提供美艳效果

    • (void)setFilter:(LIVE_FILTER_TYPE) type;

    当前提供了美白效果,设置一个LIVE_FILTER_BEAUTY这个参数,看看你有多美白。

    4,设置前后摄像头

    • (void)setCameraFront:(Boolean)bCameraFrontFlag;

    前后摄像头随时动态切换,想怎么拍就怎么拍。

    5,设置RTMP连接状态回调

    [LiveVideoCoreSDK sharedinstance].delete = self;

    在你的viewcontroller中实现协议:LIVEVCSessionDelegate,如下,这样你可以随时知道RTMP连接的状态了。

    //rtmp status delegate:

    • (void) LiveConnectionStatusChanged: (LIVE_VCSessionState) sessionState{

      dispatch_async(dispatch_get_main_queue(), ^{

        switch (sessionState) {
      
            case LIVE_VCSessionStatePreviewStarted:
      
                _RtmpStatusLabel.text = @"RTMP状态: 预览未连接";
      
                break;
      
            case LIVE_VCSessionStateStarting:
      
                _RtmpStatusLabel.text = @"RTMP状态: 连接中...";
      
                break;
      
            case LIVE_VCSessionStateStarted:
      
                _RtmpStatusLabel.text = @"RTMP状态: 已连接";
      
                break;
      
            case LIVE_VCSessionStateEnded:
      
                _RtmpStatusLabel.text = @"RTMP状态: 未连接";
      
                break;
      
            case LIVE_VCSessionStateError:
      
                _RtmpStatusLabel.text = @"RTMP状态: 错误";
      
                break;
      
            default:
      
                break;
      
        }
      

      });

    }

    6,直播结束,断开rtmp连接

    [[LiveVideoCoreSDK sharedinstance] disconnect];简单吧,不解释了。

    展开全文
  • 美颜直播调(20181224)

    千次阅读 2018-12-24 16:26:14
    美颜直播调研(20181224)直播美颜SDK(非开源)1.1 Face++ (旷视科技)美颜直播SDK开源美颜直播1. [VisioninSDK](https://github.com/rexbu/VisioninSDK)2. [Agora]...
  • <div><p>[W] Pili-ShortVideo-Authorization PLShortVideo SDK authorization status error: auth failed! <p>-[PLSNoitacitnehtua start] PLSNoitacitnehtua.m:65 我需要授权,我只需要用到视频裁剪,...
  • 安卓人脸识别及美颜

    2019-02-09 18:17:33
    公司使用了玩美彩妆公司的SDK,人脸识别使用了106个点,美颜的功能包括口红,腮红,眉笔,美瞳等功能,当然由于有知识产权的原因,不方便开源。 玩美彩妆官网:https://www.perfectcorp.cn/ 其中包括玩美彩妆,...
  • 最近需要给直播项目中添加美颜的功能,调研了很多SDK开源代码(视决,涂图,七牛,金山云,videoCore等),综合成本/效果/对项目侵入性,最后决定使用一款基于GPUImage实现的BeautifyFaceDemo美颜滤镜。...
  • 短视频SDK提供短视频录制、导入和编辑的高级功能,支持多种分辨率选择、实时美颜、实时滤镜、摄像头切换、闪光灯切换、对接人脸识别SDK实现人脸贴图等多样的录制功能、支持视频画面和时长裁剪、多视频拼接、添加滤镜...
  • 最近需要给直播项目中添加美颜的功能,调研了很多SDK开源代码(视决,涂图,七牛,金山云,videoCore等),综合成本/效果/对项目侵入性,最后决定使用一款基于 GPUImage 实现的 BeautifyFaceDemo 美颜滤镜。...
  • 该项目是基于anyRTC视频会议SDK以及白板SDK,以及会议API进行组装的。目的是为了让开发者更快,更迅速的集成视频会议。经过本次封装,用户3行代码即可集成完整的视频会议。为了更好的服务开发者,该项目完全开源,...
  • 由于需要公司需要自己来开发一套短视频编辑SDK,这里需要考虑的事就比较多了。 提到音视频编辑,大家最容易搜到的可能是ffmpeg这个牛X的开源方案。基本上市面上所有的大厂涉及到视频模块的东西都脱离不了ffmpeg。...
  • 直播技术汇总

    千次阅读 2016-10-20 13:52:31
    直播时代--IOS直播客户端SDK美颜直播 一、直播一些技术名词 1、什么是 FFmpeg ,FFmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由软件,它提供了录制、转换以及流化音视频的完整解决方案。直播系统多...
  • 直播源码开发行业发展到今天,技术相对都比较成熟,设备也都支持硬...视频直播系统源码开发公司基本都有现成的开源实现,推拉流、美颜、私信、弹幕、礼物动画、播放都有。而且现在很多云厂商都提供SDK,直播系统源码...
  • 视频直播分析

    2016-07-27 16:39:00
    一、直播现状简介 1.技术实现层面 技术相对都比较成熟,设备也都支持硬...github上有现成的开源实现,推流、美颜、水印、弹幕、点赞动画、滤镜、播放都有。技术其实不是很难,而且现在很多云厂商都提供SDK,七牛...
  • 做一款仿映客的直播

    2016-09-06 17:21:40
    一、直播现状简介1.技术实现层面技术相对都比较成熟,设备也都...github 上有现成的开源实现,推流、美颜、水印、弹幕、点赞动画、滤镜、播放都有。技术其实不是很难,而且现在很多云厂商都提供SDK,七牛云、金山云、
  • GPUImage相关(转)

    2016-11-30 14:13:00
    除了上面提到的美颜和水印之外,视频中还有很多其它的处理效果也在这个环节完成。七牛直播云提供的 SDK 在开放性设计基础之上,通过数据源回调接口,可以支持各种自定义滤镜的接入。 为了实现丰富的滤镜效果,在 ...
  • github上有现成的开源完结,推流、美颜、水印、弹幕、点赞动画、滤镜、播放都有。技术其实不是很难,并且现在许多云厂商都供应SDK,功用几乎都是一样的,没啥亮点,不同的是整个直播渠道服务差异和接入的简易性。...
  • 一个简单,快速,免费的直播SDK. 用Gradle导入 allprojects { repositories { google() jcenter() maven { url 'https://jitpack.io' } } } dependencies { compile '...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
热门标签
关键字:

美颜开源sdk