抖音实战~实现App端视频上传、发布、落库

在这里插入图片描述

在这里插入图片描述

文章目录

          • 一、API阅读
            • 1. 选择或拍摄视频
            • 2. 云函数API~文件上传
            • 3. 视频截帧
          • 二、App端视频上传流程
            • 2.1. 上传流程图
            • 2.2. 流程简述
          • 三、前端源码实战
            • 3.1. 选择/拍摄短视频
            • 3.2. 短视频上传
            • 3.3. 进度条页面
            • 3.4. 补充短视频内容
            • 3.5. 视频发布
            • 3.6. 视频预览
          • 四、后端源码实战
            • 4.1. 短视频发布
            • 4.2. 逻辑处理
          • 五、效果图鉴赏
            • 5.1. 未登陆状态
            • 5.2. 发布模式选择
            • 5.3. 选择/录制短视频
            • 5.4. 短视频发布
            • 5.5. 查看已发布作品
            • 5.6. 首页查看短视频

一、API阅读
1. 选择或拍摄视频

找到uni.chooseVideo(OBJECT)API,

选择或拍摄视频文件:https://uniapp.dcloud.net.cn/api/media/video.html#choosevideo
在这里插入图片描述

2. 云函数API~文件上传

用到的api:uniCloud.uploadFile(Object uploadFileOptions)
uniCloud API文档

在这里插入图片描述

3. 视频截帧

用途:视频截帧当视频封面
视频截帧阿里云服务
在这里插入图片描述

视频截帧服务
阿里云视频截帧
在这里插入图片描述

二、App端视频上传流程
2.1. 上传流程图

在这里插入图片描述

2.2. 流程简述
  • 1.校验用户登录状态,未登录,则跳转登录页面进行登录,登录流程继续。
  • 2.点击中间发布按钮
  • 3.选择或拍摄视频,点击确认
  • 4.携带文件信息跳转短视频发布页面
  • 5.短视频发布页面加载时,接收视频文件信息,解析文件信息
  • 6.配置文件路径和云端文件名称
  • 7.调用云函数,执行短视频云端上传
  • 8.短视频上传过程中,进度条根据实际上传进度动态展示
  • 9.短视频上传完成,调用阿里云视频截帧服务,进行视频截帧封面制作
  • 10.短视频信息封装
  • 11.补充上传内容
  • 12.发布短视频,调用后端接口服务
  • 13.短视频文件信息,简要处理,执行落库处理
三、前端源码实战
3.1. 选择/拍摄短视频
			// 监听中间按钮的点击事件uni.onTabBarMidButtonTap(()=>{// 未登录不能发布视频var myUserInfo = getApp().getUserInfoSession();if (myUserInfo == null) {uni.showToast({duration: 3000,title: "请登录~",icon: "none"});uni.navigateTo({url: "../loginRegist/loginRegist",animationType: "slide-in-bottom",success() {me.loginWords = "请登录"}});return;}// console.log('onTabBarMidButtonTap');uni.switchTab({url: "../me/me"});uni.chooseVideo({sourceType: ['album'],success(e) {uni.navigateTo({url: "/pages/publish/publish?fileObjectEvent=" + JSON.stringify(e)})/*** 或者采用uniCloud,在客户端完成上传,减少链路,因为文件大,通信链路和耗时是双倍的*/var times = new Date().getTime();}})});
3.2. 短视频上传
	// 当前页面加载时触发onLoad(params) {var me = this;this.statusBarHeight = system.statusBarHeight;this.screenWidth = system.screenWidth;// 上个页面传过来的文件事件对象,其中包含了相册中选择的视频内容var fileObjectEvent = JSON.parse(params.fileObjectEvent);var times = new Date().getTime();uniCloud.uploadFile({// 要上传的文件对象 ->获取视频临时路径filePath: fileObjectEvent.tempFilePath,// 使用阿里云时,cloudPath为云端文件名//根据具体业务自定义 cloudPath: times + '.mp4',// 进度条事件onUploadProgress(progressEvent) {var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);// 这个数值在视频上传过程中是动态变化的百分比,以此来展示上传的具体进度me.percentCompleted = percentCompleted;},// 上传完成后的流程操作success(f) {// 获取视频路径var videoUrlTemp = f.filePath;// 获取视频IDvar videoUrl = f.fileID;// 获得视频参数me.tempFilePath = videoUrlTemp;me.videoUrl = videoUrl;me.tempCover = videoUrl + "?x-oss-process=video/snapshot,t_1,f_jpg,ar_auto"; // 截帧me.width = fileObjectEvent.width;me.height = fileObjectEvent.height;}});},
3.3. 进度条页面
<!-- 进度条 --><view style="marginTop:60rpx;display: flex;flex-direction: column;justify-content: center;"v-if="percentCompleted != 100"><progress :percent="percentCompleted" stroke-width="3" activeColor="#ef274d" backgroundColor="#F1F1F1":style="{screenWidth: screenWidth + 'px'}" /><text style="color: #F1F1F1;font-size: 16px;text-align: center;margin-top: 20px;":style="{screenWidth: screenWidth + 'px'}">视频上传中~ 请耐心等待~~</text><image mode="aspectFit" src="../../static/images/loading-4.gif"style="width: 600rpx;height: 600rpx;align-self: center;"></view>
3.4. 补充短视频内容
<textarea class="vlog-content" placeholder-style="color: #9798a0;" placeholder="添加合适的标题内容" :value="title":model="title" maxlength="60" @input="typingContent" confirm-type="done"></textarea>
3.5. 视频发布
<view :class="{'btn-publish':!publichTouched, 'btn-publish-touched': publichTouched}"style="margin-top: 30rpx;height: 90rpx;display: flex;justify-content: center;border-radius: 20px;"@touchstart="touchstartPublich" @touchend="touchendPublich" @click="doPublich"><text style="color: #e6e6e6;font-size: 18px;align-self: center;font-weight: 500;">发布 Vlog</text></view>
	doPublich() {var me = this;var userId = getApp().getUserInfoSession().id;var vlog = {"vlogerId": userId,"url": me.videoUrl,"cover": me.tempCover,"title": me.title,"width": me.width,"height": me.height};// 发布视频var serverUrl = app.globalData.serverUrl;uni.request({method: "POST",header: {headerUserId: userId,headerUserToken: app.getUserSessionToken()},url: serverUrl + "/vlog/publish",data: vlog,success(result) {if (result.data.status == 200) {uni.showToast({title: "发布成功!",icon: "none"})uni.navigateBack({delta: 1,animationType: 'zoom-fade-in',animationDuration: 1000});uni.switchTab({url: "../me/me"})} else {uni.showToast({title: result.data.msg,icon: "none",duration: 3000});}}});},
3.6. 视频预览
	preview() {uni.navigateTo({url: "/pages/publish/preview?videoUrl=" + this.videoUrl + "&width=" + this.width + "&height=" +this.height,animationType: 'slide-in-bottom',animationDuration: 500})},
四、后端源码实战
4.1. 短视频发布
 /*** 发布vlog视频** @param vlogBO* @return*/@PostMapping("publish")public GraceJSONResult publish(@RequestBody VlogBO vlogBO) {vlogService.createVlog(vlogBO);return GraceJSONResult.ok();}
4.2. 逻辑处理
    /*** 发布vlog视频** @param vlogBO*/@Transactional@Overridepublic void createVlog(VlogBO vlogBO) {//视频IDString vid = sid.nextShort();Vlog vlog = new Vlog();BeanUtils.copyProperties(vlogBO, vlog);vlog.setId(vid);vlog.setLikeCounts(0);vlog.setCommentsCounts(0);vlog.setIsPrivate(YesOrNo.NO.type);vlog.setCreatedTime(new Date());vlog.setUpdatedTime(new Date());vlogMapper.insert(vlog);}
五、效果图鉴赏
5.1. 未登陆状态

在这里插入图片描述
在这里插入图片描述

5.2. 发布模式选择

在这里插入图片描述

5.3. 选择/录制短视频

在这里插入图片描述

5.4. 短视频发布

在这里插入图片描述

5.5. 查看已发布作品

在这里插入图片描述

5.6. 首页查看短视频

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从微服务到 Serverless | 开源只是开始,终态远没有到来

开源只是开始&#xff0c;终态远没有到来。 从微服务开源&#xff0c;到 Serverless 开源&#xff0c;我们正持续将阿里沉淀的技术能力进行开放。 只是这一次不同的地方在于&#xff0c;借助 Serverless 能力的释放&#xff0c;将帮助前端进入一个崭新的时代&#xff0c;只需…

从Python到AI,这条路好走吗?

大家都在学Python的时候&#xff0c;怎么才能让自己更有竞争力&#xff1f;Python 的应用方向有很多&#xff0c;基本每个方向都是大热门&#xff0c;但至今为止&#xff0c;人工智能行业仍处于人才稀缺的情况。正因这样&#xff0c;近几年来&#xff0c;AI 成为了广大 Python …

Flutter瀑布流及通用列表解决方案

作者&#xff1a;闲鱼技术-夜澜 背景 目前闲鱼业务中无论是首页还是搜索页都有大量可以落地瀑布流的场景&#xff0c;而在Flutter原生中只提供了ListView, GridView&#xff0c;无法提供自定义布局的能力。 而在社区中&#xff0c;一般瀑布流的解决方案都是基于SliverMultiB…

闲鱼的商品结构化是如何演进的(超详细)

作者&#xff1a;闲鱼技术-吴白 引言 商品的信息结构化程度在某种意义上来说决定导购效率的天花板。闲鱼商品结构化和淘宝/天猫最大的区别在于闲鱼卖家都是个人用户&#xff0c;无论是专业程度还是行动力远不及淘宝卖家。为了不阻碍商品发布&#xff0c;闲鱼一直倡导轻发布&a…

一文看懂5G射频的“黑科技”

作者 | 小枣君来源 | 鲜枣课堂&#xff08;ID&#xff1a;xzclasscom&#xff09;手机&#xff0c;作为移动互联网时代的标配&#xff0c;已经走进了我们每个人的生活。有了它&#xff0c;我们可以随心所欲地聊天、购物、追剧&#xff0c;享受美好的人生。正因为手机如此重要&a…

抖音实战~首页视频~下拉刷新

文章目录1. 配置下拉刷新2. 下拉刷新监听3. tab监听索引4. 控制台监控5. 父子组件调用6. 效果图1. 配置下拉刷新 在pages.json配置文件中添加如下配置&#xff1a; "enablePullDownRefresh":true //开启下拉刷新2. 下拉刷新监听 // 当前页下拉刷新onPullDownRefre…

支付宝研究员王益的建议:“学好语文,才能写好代码”

王益&#xff0c;蚂蚁集团研究员&#xff0c;开源项目SQLFlow 和 ElasticDL 的负责人。他从10岁开始写代码。曾经用自己焊接的电路板扩展“中华学习机”来把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机&#xff1b;用Apple BASIC语言和6502汇编混合编程写了人生中第一个…

抖音实战~搜索页面~视频详情

文章目录一、前端部分1. 检索关键词短视频列表2. 选中某一个短视频3. 短视频详情二、后端部分2.1. 短视频入口2.2. 短视频接口层2.3. 短视频服务层2.4. 持久层-接口2.5. 持久层- xml三、效果图鉴赏3.1. 搜索页面3.2. 短视频列表3.3. 短视频详情一、前端部分 1. 检索关键词短视…

技术人的灵魂 3 问,阿里工程师如何解答?

作者 | 氐宿 阿里云高级前端技术专家 导读&#xff1a;在业务团队做事的工程师摸爬滚打了一段时间后&#xff0c;一定会有所疑问。团队同学在最初的一段时间都提出这样的疑惑&#xff1a;如何在业务中发现有技术价值的问题&#xff1f;发现问题后如何思考和发起再到解决&…

10+知识图谱开放下载,让你的学习效率提升5倍! | “右脑”开发套餐

简介&#xff1a; 为了让广大开发者清晰了解技术体系&#xff0c;打造属于自己的系统学习路径。今天&#xff0c;开发者社区整理了10知识图谱&#xff0c;供大家交流学习&#xff0c;持续更新中~ 知识的学习从来就不是孤立的&#xff0c;学习任何知识&#xff08;概念、定义、…

抖音实战~分享模块~短视频下载(保存到相册)

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uni-popup 弹出层2.3. 插件涉及组件2.4. 组件改造2.5. 关键的api三、作品鉴赏3.1. 自己发布视频3.2. 其他人发布视频3.3. 保存短视频一、可见范围 保存到相册、复制链接、…

HDC.Cloud 2021剧透:六大创新产品、开发者年度盛宴即将开启

编辑 | 宋慧 出品 | CSDN云计算 头图来源 | HDC.Cloud官网 今日&#xff0c;华为开发者大会2021&#xff08;Cloud&#xff09;&#xff08;简称HDC.Cloud 2021&#xff09;媒体预沟通会在京召开&#xff0c;华为技术有限公司高级副总裁、云与计算BG副总裁张顺茂在会上表示&am…

抖音实战~分享模块~复制短视频链接

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uni-popup 弹出层2.3. 插件涉及组件2.4. 组件改造2.5. 关键的api三、作品鉴赏3.1. 自己发布视频3.2. 复制链接一、可见范围 保存到相册、复制链接、二维码 都是前端完成的…

莉莉丝《剑与远征》:基于阿里云全站加速提升用户体验

公司介绍 莉莉丝游戏致力为全球玩家创造好玩的游戏&#xff0c;坚持“全球化”与“品类进化”核心战略&#xff0c;通过对全球市场与品类发展阶段的深度理解&#xff0c;将国产手游带向了世界&#xff0c;代表作&#xff1a;《小冰冰传奇》&#xff0c;《万国觉醒》&#xff0c…

亚马逊云科技首次发布“三驾马车”中国业务战略

2021年3月25日&#xff0c;亚马逊云科技今天在北京举行媒体沟通会&#xff0c;首次正式发布“三驾马车&#xff0c;齐头并进”的中国业务战略。通过亚马逊云科技独一无二的全球优势&#xff0c;发挥亚马逊全球业务体系的强大支撑&#xff0c;并利用亚马逊的创新文化和方略&…

KubeCon 2020 阿里云推出四大企业级容器新品 ,详解云原生操作系统进化

导读&#xff1a;云原生操作系统进化&#xff0c;详解阿里云 ACK Pro、ASM、ACR EE、ACKEdge 等四款企业级容器新品。 KubeCon 2020 中国站&#xff0c;阿里云容器服务负责人易立会在《云原生&#xff0c;数字经济技术创新基石》的演讲中&#xff0c;分享阿里云原生如何助力数字…

抖音实战~分享模块~生成短视频二维码

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uQRCode2.3. 插件涉及组件2.4. 组件改造2.5. 实现原理三、作品鉴赏3.1. 生成短视频二维码3.2. 微信扫描3.3. 抖音扫描一、可见范围 保存到相册、复制链接、二维码 都是前…

轻松处理高于平常10倍的视频需求,还能节省60%的IT成本,蓝墨做对了什么?

近年来&#xff0c;Serverless 一直在高速发展&#xff0c;并呈现出越来越大的影响力。主流的云服务商也在不断地丰富云产品体系&#xff0c;提供更好的开发工具&#xff0c;更高效的应用交付流水线&#xff0c;更好的可观测性&#xff0c;更细腻的产品间集成&#xff0c;但一切…

PassMark 更新排行,苹果 M1 杀疯了

整理 | 寇雪芹出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;3月24 日&#xff0c;PassMark 网站更新了单核性能排行榜&#xff0c;苹果 M1 3.2GHz 首次上榜就直逼榜首。苹果 M1 杀疯了以数千个 PerformanceTest 基准测试结果为数据基础&#xff0c;PassMa…

uni-app使用canvas绘制二维码

文章目录1. 插件选型2. 页面部分3.事件部分1. 插件选型 uqrCode 点击安装即可 https://ext.dcloud.net.cn/search?quqrCode 2. 页面部分 template&#xff1a; <view class"canvas-qrcode-box" style"align-self: center;"><canvas id"q…