温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

微信小程序实现视频播放器发送弹幕的方法

发布时间:2021-04-27 09:43:01 阅读:868 作者:小新 栏目:开发技术
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍了微信小程序实现视频播放器发送弹幕的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、视频播放器

  • video-detail 视频播放器

  • select-color 发送弹幕

1. 页面制作

微信小程序实现视频播放器发送弹幕的方法

2. 选择弹幕颜色

微信小程序实现视频播放器发送弹幕的方法

3、 Video插件的使用

微信小程序实现视频播放器发送弹幕的方法

4. 相关代码

app.json

//app.json
{
  "pages":[
    "pages/video-detail/video-detail",
    "pages/select-color/select-color",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "视频播放器",
    "navigationBarTextStyle":"black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

app.wxss

/**app.wxss**/
.container {
  height100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding200rpx 0;
  box-sizing: border-box;
}

二、video-detail 视频播放器相关页面代码

video-detail.wxml

<!--pages/video-detail/video-detail.wxml-->
<view class="mainContent">
    <view class="mainList">
        <view class="playerInfo" data-src="{{videoDetail.videoUrl}}" wx:if="{{current_id && current_id == videoDetail.id}}">
            <view class="video">
                <video class="videoContent" id="videoId" show-center-play-btn="true" autoplay="true"
                    danmu-list="{{danmuList}}" danmu-btn enable-danmu
                 src="{{videoDetail.videoUrl}}" object-fit="fill" bindfullscreenchange="fullscreenchange"></video>
            </view>
        </view>
        <view class="playerInfo" data-src="{{videoDetail.videoUrl}}" wx:if="{{current_id =='' || current_id != videoDetail.id}}">
            <view class="video">
                <image class="playImg" src="/images/play.png" mode="aspectFill" bindtap="videoPlay" id="{{videoDetail.id}}" data-index="videoId"/>
                <image class="videoContent" src="{{videoDetail.poster}}" mode="aspectFill" bindtap="videoPlay" id="{{videoDetail.id}}" data-index="videoId"/>
            </view>
        </view>
    </view>
    <!--弹幕-->
    <view class="danmu">
        <view class="danmu-input">
            <input class="weui-input" type="text" placeholder="请输入弹幕" bindblur="bindInputblur"/>
        </view>
        <view class="danmu-btn">
            <button type="primary" bindtap = "bindSendDanmu">发送弹幕</button>
        </view>
        <view class="danmu-color">
            <view class="danmu-color-switch">
                <view class="weui-cell-bd">随机颜色</view>
                <view class="weui-cell-ft">
                    <switch checked="true" type="switch" bindchange="switchChange"></switch>
                </view>
            </view>
            <view class="danmu-color-select" bindtap = "selectColor">
                <view class="weui-cell-bd">选择颜色</view>
                <view class="weui-cell-ft">
                    <view class="selectColor" ></view>
                </view>
            </view>
        </view>
    </view>
</view>

video-detail.wxss

.mainContent{
  background#ffffff;
  overflow: auto;
}
.mainList{
  width:100%;
  background#ffffff;
  height396rpx;
}
.video{
  width:94%;
  height324rpx;
  margin-left20rpx;
  position: relative;
}
.videoContent{
  width:100%;
  height324rpx;
}
/*播放小图标*/
.playImg{
  position: absolute;
  top46%;
  left:46%;
  width:64rpx;
  height64rpx;
}
/*弹幕*/
.danmu{
  width:100%;
}
.danmu-input{
  width:100%;
  height60rpx;
}
.weui-input{ 
  display: flex;
  width:94%;
  height60rpx;
  align-items: center;
  margin-left20rpx;
  border-radius8rpx;
  border:2rpx solid #cccccc;
  padding-left:10rpx;
  font-size28rpx;
}
.danmu-btn{
  width:100%;
  margin-top20rpx;
}
.danmu-color{
  width:100%;
  margin-top20rpx;
  border-top:2rpx solid #cccccc;
}
.danmu-color-switch,.danmu-color-select{
  display: flex;
  flex-direction: row;
  justify-content: space-between;/*两端对齐*/
  align-items: center;
  margin20rpx 20rpx 0 20rpx;
}
.weui-cell-bd{
  font-size28rpx;
}
.weui-cell-ft{
  font-size28rpx;
}
.selectColor{
  width:80rpx;
  height80rpx;
  line-height100rpx;
}

video-detail.js

// pages/video-detail/video-detail.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    current_id:'',//当前播放视频id
    videoDetail:{
      id:"1",
      "videoUrl":"http://1256993030.vod2.myqcloud.com/d520582dvodtransgzp1256993030/7732bd367447398157015849771/v.f30.mp4",
      "poster":"//vodplayerinfo-10005041.file.myqcloud.com/3035579109/vod_paster_pause/paster_pause1469013308.jpg"
    },
    //弹幕列表
    danmuList:[
      {
        text'第1s出现的红色弹幕',
        color'#ff0000',
        time1
      },
      {
        text'第2s出现的绿色弹幕',
        color'#00ff00',
        time2
      },
      
    ],
    isRandomColortrue,// 默认随机
    numberColor:"#ff0000",//默认红色
    inputValue"",//文本框输入内容
     
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoadfunction (options) {
    
  },  
  /**
   * 生命周期函数--监听页面显示
   */
  onShowfunction(){
    if(wx.getStorageSync('color')){
      this.setData({
        numberColor: wx.getStorageSync('color')
      })
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReadyfunction () {
    this.videoContext = wx.createVideoContext("videoId")
  },
  //视频列表点击事件
  videoPlay:function(e){
    console.log(e)
    var id= e.currentTarget.dataset.index
    var currentId=e.currentTarget.id
    this.setData({
      current_id: currentId
    })
    var videoContext = wx.createVideoContext(id)
    videoContext.play()
  },
  //文本框失去焦点事件
  bindInputblurfunction(e){
    // console.log(e.detail.value)
    this.data.inputValue = e.detail.value
  },
  //发送弹幕内容
  bindSendDanmu : function(e){
    //设置弹幕颜色
    var color=""
    if(this.data.isRandomColor){//随机颜色
      color = this.getRandomColor()
    }else{
      color = this.data.numberColor
    }
    //发送弹幕
    this.videoContext.sendDanmu({
      textthis.data.inputValue,
      color:color
    })
  },
  //设置随机颜色
  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('')
  },
  //switch开关切换事件
  switchChangefunction(e){
    console.log(e)
    this.data.isRandomColor = e.detail.value

  },
  //选择颜色
  selectColor:function(){
    wx.navigateTo({
      url'/pages/select-color/select-color'
    })
  }
})

三、select-color 发送弹幕相关页面代码

select-color.wxml

<!--pages/select-color/select-color.wxml-->
<view class="page">
    <view class="page_bd">
        <view class="color-items">
            <block wx:for="{{colorItems}}">
                <view class="item" data-number="{{item.number}}" bindtap = "selectColor">
                    <view class="item-icon" ></view>
                </view>
            </block>
        </view>
    </view>
</view>

select-color.wxss

/* pages/select-color/select-color.wxss */
.color-items{
  border-top1rpx solid #d9d9d9;
  border-left1rpx solid #d9d9d9;
}
.item{
  position: relative;
  float: left;
  padding20rpx; 
  width20%;
  box-sizing: border-box;
  border-right1rpx solid #d9d9d9;
  border-bottom1rpx solid #d9d9d9;
}
.item-icon{
  display: block;
  width:100rpx;
  height100rpx;
  margin0 auto;
  box-shadow3px 3px 5px #bbbbbb;
}

select-color.js

// pages/select-color/select-color.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    colorItems:[
      { key1, color' 白色 ', number'#FFFFFF' },

      { key2, color' 红色 ', number'#FF0000' },

      { key3, color' 绿色 ', number'#00FF00' },

      { key4, color' 蓝色 ', number'#0000FF' },

      { key5, color' 牡丹红 ', number'#FF00FF' },

      { key6, color' 青色 ', number'#00FFFF' },

      { key7, color' 黄色 ', number'#FFFF00' },

      { key8, color' 黑色 ', number'#000000' },

      { key9, color' 海蓝 ', number'#70DB93' },

      { key10, color' 巧克力色 ', number'#5C3317' },

      { key11, color' 蓝紫色 ', number'#9F5F9F' },

      { key12, color' 黄铜色 ', number'#B5A642' },

      { key13, color' 亮金色 ', number'#D9D919' },

      { key14, color' 棕色 ', number'#A67D3D' },

      { key15, color' 青铜色 ', number'#8C7853' },

      { key16, color' 2号青铜色 ', number'#A67D3D' },

      { key17, color' 士官服蓝色 ', number'#5F9F9F' },

      { key18, color' 冷铜色 ', number'#D98719' },

      { key19, color' 铜色 ', number'#B87333' },

      { key20, color' 珊瑚红 ', number'#FF7F00' },

      { key21, color' 紫蓝色 ', number'#42426F' },

      { key22, color' 深棕 ', number'#5C4033' },

      { key23, color' 深绿 ', number'#2F4F2F' },

      { key24, color' 深铜绿色 ', number'#4A766E' },

      { key25, color' 深橄榄绿 ', number'#4F4F2F' },

      { key26, color' 深兰花色 ', number'#9932CD' },

      { key27, color' 深紫色 ', number'#871F78' },

      { key28, color' 深石板蓝 ', number'#6B238E' },

      { key29, color' 深铅灰色 ', number'#2F4F4F' },

      { key30, color' 深棕褐色 ', number'#97694F' },

      { key32, color' 深绿松石色 ', number'#7093DB' },

      { key33, color' 暗木色 ', number'#855E42' },

      { key34, color' 淡灰色 ', number'#545454' },

      { key35, color' 土灰玫瑰红色 ', number'#856363' },

      { key36, color' 长石色 ', number'#D19275' },

      { key37, color' 火砖色 ', number'#8E2323' },

      { key38, color' 森林绿 ', number'#238E23' },

      { key39, color' 金色 ', number'#CD7F32' },

      { key40, color' 鲜黄色 ', number'#DBDB70' },

      { key41, color' 灰色 ', number'#C0C0C0' },

      { key42, color' 铜绿色 ', number'#527F76' },

      { key43, color' 青黄色 ', number'#93DB70' },

      { key44, color' 猎人绿 ', number'#215E21' },

      { key45, color' 印度红 ', number'#4E2F2F' },

      { key46, color' 土黄色 ', number'#9F9F5F' },

      { key47, color' 浅蓝色 ', number'#C0D9D9' },

      { key48, color' 浅灰色 ', number'#A8A8A8' },

      { key49, color' 浅钢蓝色 ', number'#8F8FBD' },

      { key59, color' 浅木色 ', number'#E9C2A6' },

      { key60, color' 石灰绿色 ', number'#32CD32' },

      { key61, color' 桔黄色 ', number'#E47833' },

      { key62, color' 褐红色 ', number'#8E236B' },

      { key63, color' 中海蓝色 ', number'#32CD99' },

      { key64, color' 中蓝色 ', number'#3232CD' },

      { key65, color' 中森林绿 ', number'#6B8E23' },

      { key66, color' 中鲜黄色 ', number'#EAEAAE' },

      { key67, color' 中兰花色 ', number'#9370DB' },

      { key68, color' 中海绿色 ', number'#426F42' },

      { key69, color' 中石板蓝色 ', number'#7F00FF' },

      { key70, color' 中春绿色 ', number'#7FFF00' },

      { key71, color' 中绿松石色 ', number'#70DBDB' },

      { key72, color' 中紫红色 ', number'#DB7093' },

      { key73, color' 中木色 ', number'#A68064' },

      { key74, color' 深藏青色 ', number'#2F2F4F' },

      { key75, color' 海军蓝 ', number'#23238E' },

      { key76, color' 霓虹篮 ', number'#4D4DFF' },

      { key77, color' 霓虹粉红 ', number'#FF6EC7' },

      { key78, color' 新深藏青色 ', number'#00009C' },

      { key79, color' 新棕褐色 ', number'#EBC79E' },

      { key80, color' 暗金黄色 ', number'#CFB53B' },

      { key81, color' 橙色 ', number'#FF7F00' },
    ]

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },
  //点击,选中颜色
  selectColor(e){
    console.log(e)
    let number =e.currentTarget.dataset.number
    //存储在本地
    wx.setStorageSync('color', number)
    //返回上一页
    wx.navigateBack({
      delta1, // 回退前 delta(默认为1) 页面
      success: function(res){
        // success
      },
      fail: function() {
        // fail
      },
      complete: function({
        // complete
      }
    })
  }

})

四、页面实现效果

微信小程序实现视频播放器发送弹幕的方法

感谢你能够认真阅读完这篇文章,希望小编分享的“微信小程序实现视频播放器发送弹幕的方法”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×