开发体育赛事直播系统源码:主播端核心功能模块部分代码示例

本文介绍了体育直播系统中主播端核心功能模块“我是主播”的实现思路与关键代码。该模块基于 Vue.js 构建前端页面,后端采用 ThinkPHP 提供 API 支持,同时兼容 Android(Java)和 iOS(Objective-C)移动端访问,确保多端一致体验。

前端(Vue.js)实现

直播收益页面



直播记录页面



后端(PHP + ThinkPHP)

接口:获取直播收益

public function earnings()
{
    $anchorId = session('user_id');
    $date = input('post.date'); // yyyy-MM 格式

    $start = $date . '-01';
    $end = date("Y-m-t", strtotime($start));

    $list = Db::name('gift_log')
        ->where('anchor_id', $anchorId)
        ->whereBetweenTime('create_time', $start, $end)
        ->field('create_time as date, gift_name, gift_value, from_user_id as sender')
        ->select();

    $total = array_sum(array_column($list, 'gift_value'));

    return json(['code' => 1, 'data' => $list, 'total' => $total]);

接口:获取直播记录

public function history()
{
    $anchorId = session('user_id');
    $range = input('post.range'); // week / month / three_months

    switch ($range) {
        case 'week':
            $start = date("Y-m-d", strtotime("-7 days"));
            break;
        case 'month':
            $start = date("Y-m-01");
            break;
        case 'three_months':
            $start = date("Y-m-d", strtotime("-3 months"));
            break;
    }

    $list = Db::name('live_session')
        ->where('anchor_id', $anchorId)
        ->where('start_time', '>=', $start)
        ->field('start_time, duration')
        ->select();

    $total_seconds = array_sum(array_column($list, 'duration'));
    $total_time = gmdate("H小时i分s秒", $total_seconds);

    return json(['code' => 1, 'records' => $list, 'total_time' => $total_time]);
}

移动端逻辑(Java / Objective-C)

Android(Java)

@POST("api/anchor/earnings")
Call getEarnings(@Body EarningsRequest request);

Call call = api.getEarnings(new EarningsRequest("2021-09"));
call.enqueue(new Callback() {
  @Override
  public void onResponse(Call call, Response response) {
    earningsList.setAdapter(new EarningsAdapter(response.body().data));
  }
});

iOS(Objective-C)

NSURL *url = [NSURL URLWithString:@"https://yourapi.com/api/anchor/earnings"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
NSDictionary *params = @{@"date": @"2021-09"};
request.HTTPBody = [NSJSONSerialization dataWithJSONObject:params options:0 error:nil];

NSURLSessionDataTask *task = [[NSURLSession sharedSession]
  dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        self.earningsData = json[@"data"];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
}];
[task resume];

数据库设计(MySQL)

CREATE TABLE `gift_log` (
  `id` int NOT NULL AUTO_INCREMENT,
  `anchor_id` int NOT NULL,
  `from_user_id` int NOT NULL,
  `gift_name` varchar(50),
  `gift_value` int,
  `create_time` datetime,
  PRIMARY KEY (`id`)
);

CREATE TABLE `live_session` (
  `id` int NOT NULL AUTO_INCREMENT,
  `anchor_id` int NOT NULL,
  `start_time` datetime,
  `duration` int COMMENT '单位为秒',
  PRIMARY KEY (`id`)
);

开发体育赛事直播系统源码:主播端核心功能模块部分代码示例_第1张图片
开发体育赛事直播系统源码:主播端核心功能模块部分代码示例_第2张图片

你可能感兴趣的:(vue.jsphpjava)