直播开发

master
gongfuxiang 2025-10-30 18:47:31 +08:00
parent 31f44ac458
commit 2c97f9e13f
3 changed files with 236 additions and 5 deletions

View File

@ -2052,7 +2052,7 @@
},
// app
application_client_brand(e) {
application_client_brand() {
var value = this.get_system_info('brand', null, true);
return (value === null) ? '' : value.toLowerCase();
},

View File

@ -14,6 +14,7 @@ a {
*/
page,
iframe,
.page-width-max,
.uni-page-head,
.uni-tabbar,
.open-location,

View File

@ -7,6 +7,24 @@
:show-fullscreen-btn="show_fullscreen_btn"
:enable-play-gesture="false"
></video>
<view class="page-width-max pf z-i-deep bottom-0-lg wh-auto bg-white">
<view v-if="message_list.length > 0" class="radius padding-main">
<block v-for="(item, index) in message_list">
<view class="padding-vertical-xs">{{item.content}}</view>
</block>
</view>
<view v-if="join_user_list.length > 0" class="radius padding-main">
<block v-for="(item, index) in join_user_list">
<view class="padding-vertical-xs">
<text>{{item.content}}</text>
<text class="cr-grey">{{item.tips}}</text>
</view>
</block>
</view>
<view class="radius padding-main br-t">
<input type="text" placeholder="请输入消息内容" confirm-type="send" @confirm="input_confirm_event" />
</view>
</view>
</view>
</template>
<script>
@ -15,21 +33,233 @@
data() {
return {
theme_view: app.globalData.get_theme_value_view(),
application_client_type: app.globalData.application_client_type(),
application_client_brand: app.globalData.application_client_brand(),
//
autoplay: true,
//
controls: false,
//
show_fullscreen_btn: false,
//
task: null,
//
live_room_id: 1,
// socketid
fd: 0,
//
ping_timer: null,
//
ping_interval: 30,
// id
live_user_id: 0,
//
join_user_list: [],
//
message_list: [
{
content: '您好呀'
},
{
content: 's啥地方都是'
},
{
content: '三个顺丰公司的'
}
],
}
},
onLoad(params) {
//
app.globalData.page_event_onload_handle(params);
//
this.setData({
params: app.globalData.launch_params_handle(params),
});
//
this.init();
},
onShow() {
//
app.globalData.page_event_onshow_handle();
// onshow
if ((this.$refs.common || null) != null) {
this.$refs.common.on_show();
}
//
app.globalData.page_share_handle();
},
onUnload() {
this.clear_interval_task();
},
methods: {
//
init() {
this.socket();
},
// socket
socket() {
let self = this;
let task = uni.connectSocket({
url: "ws://localhost:9501",
header: {
"content-type": "application/json",
},
complete: () => {}
});
task.onOpen(function(res) {
self.setData({
task: task,
});
console.log('open', res);
});
task.onMessage(function(res) {
//console.log('message', res);
self.socket_message_back_handle(res);
});
task.onClose(function(res) {
self.setData({
task: null,
});
console.log('close', res);
});
task.onError(function(res) {
self.setData({
task: null,
});
console.log('error', res);
});
},
//
video_error_callback: function(e) {
uni.showModal({
content: e.target.errMsg,
showCancel: false
})
console.log(e.target.errMsg)
},
//
socket_message_back_handle(e) {
let res = JSON.parse(e.data);
if(res.code != 0) {
app.globalData.showToast(res.msg);
return false;
}
let data = res.data;
console.log(data);
switch(data.type) {
//
case 'init' :
this.setData({
fd: data.data.fd,
ping_interval: parseInt(data.data.ping_interval || 30),
});
//
this.socket_send('init');
break;
//
case 'init-success' :
this.setData({
live_user_id: data.data.live_user_id
});
//
this.socket_ping_handle();
console.log('connect success');
break;
//
case 'init-fail' :
console.log('connect fail');
break;
//
case 'join' :
let temp_join_user_list = this.join_user_list;
temp_join_user_list.push({content: data.content, tips: data.tips});
this.setData({
join_user_list: temp_join_user_list
});
console.log(data.content, 'join');
break;
//
case 'message' :
let temp_message_list = this.message_list;
temp_message_list.push({content: data.content});
this.setData({
message_list: temp_message_list
});
console.log('message');
break;
}
},
//
// type init, ping, message
socket_send(type = 'message', content = '') {
if(this.task === null) {
app.globalData.showToast('socket连接失败');
return false;
}
//
let uuid = app.globalData.request_uuid();
let user = app.globalData.get_user_cache_info();
let token = user == null ? '' : user.token || '';
this.task.send({data: JSON.stringify({
application_client_type: this.application_client_type,
application_client_brand: this.application_client_brand,
system_type: app.globalData.data.system_type,
uuid: uuid,
token: token,
live_room_id: this.live_room_id,
live_user_id: this.live_user_id,
fd: this.fd,
type: type,
content: content
})});
},
//
socket_ping_handle() {
//
let self = this;
self.clear_interval_task();
//
let ping_timer = setInterval(function() {
self.socket_send('ping', app.globalData.get_timestamp());
}, self.ping_interval*1000);
//
self.setData({
ping_timer: ping_timer
});
},
//
clear_interval_task() {
clearInterval(this.ping_timer);
},
//
input_confirm_event(e) {
var value = e.detail.value || null;
if(value === null) {
app.globalData.showToast('请输入消息内容!');
return false;
}
this.socket_send('message', value);
}
}
}