小程序:播放视频

Posted snow@li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序:播放视频相关的知识,希望对你有一定的参考价值。

问题一:本地视频无法播放,如图:

解决:需要使用服务器地址

w小程序 video 组件播放本地视频(黑屏无法播放,报错:MEDIA_ERR_SRC_NOT_SUPPORTED)_卡尔特斯的博客-CSDN博客_小程序video黑屏

问题二:开发工具、Android可以播放,ios手机(部分视频)不能播放 

 

视频组件video视频安卓正常播放,iOS不能播放,为什么? | 微信开放社区

微信小程序 video标签 ios不能播放视频或视频黑屏_喜欢划水的咸鱼码畜的博客-CSDN博客

https://www.jianshu.com/p/31f0593496ef

小程序 ios播放不了视频,时间显示00:00,或者播了几秒就一直转圈 | 微信开放社区

微信小程序ios无法播放视频_renzhehongyi的博客-CSDN博客

 苹果机型小程序无法播放视频? | 微信开放社区

微信小程序ios无法播放视频 | 微信开放社区

微信小程序 video标签 ios不能播放视频或视频黑屏 - 爱码网

几种常见视频格式ContentType和FileType对照表 - 技术家园,原创博客

https://www.jianshu.com/p/4d206e182f8f

Content-Type类型介绍 · 测试文档 · 看云

HTTP 协议的Content-type都有哪些文件类型_村中少年的博客-CSDN博客_http文件类型

最终解决:

后端设置响应头:

response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("ETag", fileName);
response.setHeader("Last-Modified", new Date().toString());
response.setHeader("Content-length", "" + length);
response.setHeader("Content-Range", "bytes " + requestStart + "-" + requestEnd + "/" + contentLength);

微信公众号ios系统不能播放视频android可以播放问题解决方法 | 微信开放社区

h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等 - 爱码网

至此,问题得到解决,但是排查的时候暴露了很多技术短板, 

短板一、对http相关内容了解还是少;

短板二、对后端知识了解也不够;

短板三、虽然之前做过直播和短视频的业务,现在看来对视频播放相关内容了解也是少;

问题三:小程序播放视频,有什么审核要求/限制

小程序上线视频播放有什么审核限制吗 | 微信开放社区

问题四:不能播放阿里oss存储的视频

小程序video标签无法播放阿里oss视频

小程序video播放OSS防盗链视频报错_baymaxWu的博客-CSDN博客

video | 微信开放文档

待验证

最后,欢迎交流指正,关注我一起学习。

微信小程序视频播放小程序

课程?中国海洋大学22夏《移动软件开发》
实验名称实验3:视频播放小程序

一、实验目标

1、掌握视频列表的切换方法;

2、掌握视频自动播放方法;

3、掌握视频随机颜色弹幕效果。

二、实验步骤

一、项目创建

 

二、页面配置

  1. 创建页面文件 并 删除和修改文件

  • [删除] utils文件夹及其内部所有内容;

  • [删除] app.json 文件内 pages 属性中的 "pages/logs/logs",并[删除] pages 文件夹下的 logs 目录机器内部所有内容;

  • [删除] index.wxml 及 index.wxss 文件中全部的代码;

  • [删除] index.js 中的全部代码,并输入关键词 page 找到并补全函数。

  • [删除] app.wxss 文件中全部的代码;

  • [删除] app.js 中的全部代码,并输入关键词 app 找到并补全函数。

  1. 创建图表文件夹

    • 在中间的目录结构单击 右键 新建 images 文件夹。

    右键单击 image 文件夹,点击 [在资源管理器中打开] 。将播放按键放入此文件夹。

 

三、视图设计

  1. 导航栏设计

    在 app.json 文件中自定义导航栏效果

    
      "pages": [
        "pages/index/index"
      ],
      "window": 
        "navigationBarBackgroundColor": "#987938",
        "navigationBarTitleText": "口 述 校 史"
      ,
      "sitemapLocation": "sitemap.json"
    

    颜色 金棕色;导航栏标题 口述校史;

  2. 页面设计

    页面上主要包含三个区域:

     

    • 区域 1:视频播放器,可播放指定视频; video 组件;

    • 区域 2:弹幕发送区,包含文本输入框和发送按钮; view 组件,并定义 class='danmuArea';

      内部:input 组件和 button 组件;

    • 区域 3:视频列表,垂直排列多个视频标题。点击不同的标题播放对应的视频; view 组件,并定义 class='videoList';

      内单元行:view 组件,并定义 class='videoBar';

      单元行内:image 组件和 text 组件。

    • 页面整体:view 组件,并定义 class= 'container';

  1. 视频组件设计

    index.wxml 代码如下:

    <!--区域 1 :视频播放器-->
    <video id='myVideo' controls></video>

    controls属性用于播放/暂停 、音量控制等组件。

    index.wxss 代码如下:

    /**视频组件样式**/
    video
      width: 100%;  /*视频组件宽度 100% */
    

  2. 弹幕区域设计

    index.wxml 代码如下:

    <!--区域 1 :视频播放器-->
      ……
    <!--区域 2 :弹幕发送-->
    <view class='danmuArea'>
      <input type='text' placeholder="请输入弹幕内容"></input>
      <button bindtap="sendDanmu">发送弹幕</button>
    </view>

    index.wxss 代码如下:

    /**弹幕发送样式**/
    /*弹幕发送区样式*/
    .danmuArea
      width: 95%;
      margin: 10rpx;
      display: flex;  /*flex模型布局*/
      flex-direction: row;  /*水平排列*/
    
    /*弹幕输入区样式*/
    input
      border: 1rpx solid #987938;  /*1rpx宽实线金棕色边框*/
      flex-grow: 1;  /*扩张多余空间宽度*/
      height: 100rpx;
    
    /*发送按钮样式*/
    button
      color: white;  /*字体颜色*/
      background-color: #987938;  /*背景颜色*/
    

  3. 视频列表设计

    index.wxml 代码如下:

    <!--区域 1 :视频播放器-->
      ……
    <!--区域 2 :弹幕发送-->
      ……
    <!--区域 3 :视频列表-->
    <view class='videoList'>
      <view class='videoBar'>
        <image src='/images/play.png'></image>
        <text>测试标题</text>
      </view>
    </view>

    index.wxss 代码如下:

    /**视频列表**/
    /*视频列表区样式*/
    .videoList
      width: 100%;  /*宽度*/
      min-height: 400rpx;  /*最小高度*/
    
    /*单行视频列表样式*/
    .videoBar
      width: 95%;
      display: flex;
      flex-direction: row;
      border: 1rpx solid #987938;
      margin: 10rpx;  /*外边框*/
    
    /*播放图标样式*/
    image
      width: 70rpx;
      height: 70rpx;
      margin: 20rpx;
    
    /*视频标题样式*/
    text
      font-size: 45rpx;  /*字体大小*/
      color: #987938;
      margin: 20rpx;
      flex-grow: 1;
    

四、逻辑实现

  1. 更新播放列表

    index.wxml 代码修改如下:

    <!--index.wxml-->
    <view class="container">
      <!--区域 1 :视频播放器-->
      <video id='myVideo' controls src='src'></video>
    ​
      <!--区域 2 :弹幕发送-->
      ……
    ​
      <!--区域 3 :视频列表-->
      <view class='videoList'>
        <view class='videoBar' wx:for="list" wx:key="videoindex">
          <image src='/images/play.png'></image>
          <text>item.title</text>
        </view>
      </view>
    </view>

    index.js 文件的 page 函数的 data属性 中添加:

    list: [
          id: '1001',
          title: '杨国宜先生口述校史实录',
          videoUrl: 'http://arch.ahnu.edu.cn/__local/6/CB/D1/C2DF3FC847F4CE2ABB67034C595_025F0082_ABD7AE2.mp4?e=.mp4'
        ,
        
          id: '1002',
          title: '唐成伦先生口述校史实录',
          videoUrl: 'http://arch.ahnu.edu.cn/__local/E/31/EB/2F368A265E6C842BB6A63EE5F97_425ABEDD_7167F22.mp4?e=.mp4'
        ,
        
          id: '1003',
          title: '倪光明先生口述校史实录',
          videoUrl: 'http://arch.ahnu.edu.cn/__local/9/DC/3B/35687573BA2145023FDAEBAFE67_AAD8D222_925F3FF.mp4?e=.mp4'
        ,
        
          id: '1004',
          title: '吴仪兴先生口述校史实录',
          videoUrl: 'http://arch.ahnu.edu.cn/__local/5/DA/BD/7A27865731CF2B096E90B522005_A29CB142_6525BCF.mp4?e=.mp4'
        
      ]

  2. 点击播放视频

    index.wxml 代码修改如下:

    <!--区域 3 :视频列表-->
    <view class='videoList'>
      <view class='videoBar' wx:for="list" wx:key="videoindex" data-url='item.videoUrl' bindtap="playVideo">
        <image src='/images/play.png'></image>
        <text>item.title</text>
      </view>
    </view>

    index.js 文件的 page 函数进行如下修改:

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) 
      this.videoCtx = wx.createVideoContext('myVideo')
    

    index.js 文件的 page 函数添加如下自定义函数:

    /**
     * 播放视频
     */
    playVideo: function(e)
      //停止视频
      this.videoCtx.stop()
      //更新视频地址
      this.setData(
          src: e.currentTarget.dataset.url
      )
      //播放新视频
      this.videoCtx.play()
    

  3. 发送弹幕

    对 区域1 的 video 组件添加 enable-danmu 和 danmu-btn 属性,用于允许发送弹幕和显示“发送弹幕”按钮。

    index.wxml 代码修改如下:

    <!--区域 2 :弹幕发送-->
    <view class='danmuArea'>
      <input type='text' placeholder="请输入弹幕内容" bindinput="getDanmu"></input>
      <button bindtap="sendDanmu">发送弹幕</button>
    </view>

    index.js 代码修改如下:

    /**
     * 页面的初始数据
     */
    data: 
      danmuTxt:'',
      list: [……]
    ,
    ​
    /**
     * 播放视频:此处略
     */
    
    ​
    /**
     * 更新弹幕内容
     */
    getDanmu: function(e)
      this.setData(
        danmuTxt: e.detail.value
      )
    ,
    ​
    /**
     * 发送弹幕
     */
    sendDanmu: function(e)
      let text = this.data.danmuTxt;
      this.videoCtx.sendDanmu(
        text: text,
        color: getRandomColor()  //自定义函数--弹幕颜色随机生成
      )
    

    为实现弹幕颜色的随机生成,在 index.js 文件的 page 函数之外中添加自定义函数:

    //生成随机颜色
    function getRandomColor() 
      let rgb = []
      for(let i = 0; i < 3; i++)
        let color = Math.floor(Math.random() * 256).toString(16)
        color = color.length == 1? '0' + color : color
        rgb.push(color)
      
      return '#' + rgb.join('')
    

三、程序运行结果

 

四、问题总结与体会

一、遇到的问题 及 解决方法

  1. 渲染层错误

    调试时会出现渲染层报错。原因为浏览器禁止视频自动播放,无视即可。不影响小程序中视频的播放。

  2. 热重载

    关闭模拟器处的热重载,不然会有很多莫名其妙的 Bug 。

二、收获和体会

  1. 熟悉 video 组件的使用

  2. 学习列表的切换,为下一个实验做准备。

以上是关于小程序:播放视频的主要内容,如果未能解决你的问题,请参考以下文章

oppo手机小程序视频播放不了,为啥?

在小程序中使用腾讯视频插件播放教程视频

微信小程序视频播放小程序

微信小程序如何播放腾讯视频?

视频播放小程序-小程序媒体API-基础入门

微信小程序视频播放时长总计怎么看