搭建体育直播网站通常涉及流媒体服务器、前端播放器、赛事数据等多个模块。本文介绍如何使用 Java(Spring Boot)+ Vue 结合 Owncast 开源流媒体服务器,低成本搭建体育直播网站,并集成实时比分数据。 1. 方案架构- 前端(Vue 3 + Element UI):实现直播页面、聊天室、用户系统
- 后端(Spring Boot + WebSocket):管理赛事数据、推送实时比分
- 流媒体服务器(Owncast):支持 RTMP 推流 + HLS 播放
- 数据库(MySQL / Redis):存储用户、赛事信息
2. 搭建流媒体服务器(Owncast)服务器要求(最低配置): - CPU:2 vCPU,内存:2GB,带宽:10Mbps+
- 系统:Ubuntu 20.04 / Debian 10+
安装 Owncast: bash
复制编辑
ssh root@your-server-ipcurl -fsSL https://owncast.online/install.sh | bashcd owncast && ./owncast
访问 http://your-server-ip:8080 进入管理后台,获取 RTMP 推流地址,并用 OBS 进行推流。 3. 开发后端(Spring Boot)3.1 项目初始化创建 Spring Boot 项目,并添加必要依赖: xml
复制编辑
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>
3.2 实时比分接口使用 Football-Data API 获取赛事数据: java
复制编辑
@RestController@RequestMapping("/api/matches")public class MatchController { @GetMapping("/live") public String getLiveScores() { RestTemplate restTemplate = new RestTemplate(); String url = "https://api.football-data.org/v4/matches"; HttpHeaders headers = new HttpHeaders(); headers.set("X-Auth-Token", "your_api_key"); HttpEntity<String> entity = new HttpEntity<>(headers); ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); return response.getBody(); }}
前端可通过 WebSocket 订阅实时比分: java
复制编辑
@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new ScoreWebSocketHandler(), "/ws/scores").setAllowedOrigins("*"); }}
4. 开发前端(Vue 3 + Element UI)4.1 安装 Vue 项目bash
复制编辑
npm create vite@latest sports-live --template vuecd sports-livenpm installnpm install axios element-plus
4.2 直播播放器使用 Video.js 播放 HLS 直播: vue
复制编辑
<template> <video id="video" class="video-js vjs-default-skin" controls autoplay> <source :src="streamUrl" type="application/x-mpegURL"> </video></template><script setup>import { ref } from "vue";const streamUrl = ref("http://your-server-ip:8080/stream.m3u8");</script>
4.3 实时比分 WebSocketvue
复制编辑
<template> <div> <h3>实时比分</h3> <p v-for="(match, index) in matches" :key="index"> {{ match.homeTeam }} {{ match.score }} {{ match.awayTeam }} </p> </div></template><script setup>import { ref, onMounted } from "vue";const matches = ref([]);const ws = new WebSocket("ws://your-server-ip/ws/scores");ws.onmessage = (event) => { matches.value = JSON.parse(event.data);};onMounted(() => { ws.send("subscribe");});</script>
5. 优化与变现CDN 加速- 使用 Cloudflare / Fastly 进行 HLS 片段缓存,提高全球播放速度
广告变现- Google AdSense 插入广告
- VIP 订阅 / 付费 PPV(Pay-Per-View)
- 礼物打赏(用户可以打赏主播)
6. 结论使用 Java(Spring Boot)+ Vue + Owncast,可以低成本搭建一个支持推流、HLS 播放、聊天室、实时比分的体育直播网站,并通过 WebSocket 进行比分推送,结合 CDN 进行优化,提升用户体验。
|