uniapp live-pusher + 腾讯云直播

直播端

html 复制代码
<live-pusher
			id="livePusher"
			ref="livePusher"
			class="livePusher"
			:url="src"
			:mode="mode"
			:enable-camera="enableCamera"
			:auto-focus="true"
			:device-position="position"
			:beauty="beauty"
			:whiteness="whiteness"
			aspect="9:16"
			@statechange="statechange"
			@netstatus="netstatus"
			@error="error"
			:style="'height: ' + windowHeight + 'px;'"
			style="width: 750rpx"
		></live-pusher>
javascript 复制代码
<script>
import { mapState } from 'vuex';
export default {
	data() {
		return {
			windowHeight: 0,
			src: '',
			mode: 'FHD',
			enableCamera: true,
			position: 'front',
			beauty: 0,
			whiteness: 0,
			context: null,
			// 是否开始推流
			isStart: false,
			isPause: false,
		};
	},
	onLoad(options) {
		/* 叫后端返回,推流地址别加鉴权,加了鉴权出不来 */
		this.src = options.url;
	},
	onShow() {
		let res = uni.getSystemInfoSync();
		this.windowHeight = res.windowHeight;
		if (this.context) {
			this.resume();
		}
	},
	onReady() {
		this.context = uni.createLivePusherContext('livePusher', this);
		this.startPreview();
		// 开始推流
		this.start();
	},
	onBackPress(e) {
		if (e.from == 'backbutton') {
			this.back();
			return true;
		}
	},
	onUnload() {
		this.stop();
	},
	methods: {
		// 开始推流
		start() {
			this.context.start({
				success: (e) => {
					this.isStart = true;
					console.log('开始推流', e);
				},
				fail: (err) => {
					console.log('开始推流失败', err);
				}
			});
		},
		// 开启预览
		startPreview() {
			this.context.startPreview({
				success: (e) => {
					console.log('开启预览', e);
				}
			});
		},
		// 直播状态变化
		statechange(e) {
			console.log('直播状态变化', e);
		},
		// 直播网络变化
		netstatus(e) {
			console.log('直播网络变化', e);
		},
		error(e) {
			console.log('直播报错', e);
		},
		stop() {
			this.context.stop({
				success: () => {
					
				}
			});
		},
		// 继续推流
		resume() {
			this.context.resume({
				success: () => {
					this.isPause = false;
				}
			});
		},
		// 暂停推流
		pause() {
			this.context.pause({
				success: () => {
					this.isPause = true;
				}
			});
		},
		// 退出直播
		back() {
			uni.showModal({
				content: '是否要关闭直播间?',
				success: (res) => {
					if (res.cancel) {
						return;
					}
					this.stop();
				}
			});
		},
	}
};
</script>

腾讯云直播文档地址(发给后端就行---推流地址别加鉴权)

https://cloud.tencent.com/document/product/267/32833

观众端,拉流地址就让后端直接返回就行

其他代码就不贴了,涉及到我这边其他业务,你们不一定用得上,懒得贴

相关推荐
志尊宝8 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing039 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel9 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放9 小时前
Python基础语法练习题(73)
java·前端·python
风骏时光牛马10 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端
小小善后师10 小时前
我做了个病历归档小程序,被 AI 识别的"最后一公里"狠狠上了一课
前端
H_Lisa10 小时前
我用 Express 写了个 MCP,Claude 直接调用我的 API 了
前端
IT_陈寒10 小时前
React的useEffect依赖数组把我坑惨了
前端·人工智能·后端
兰亭妙微UI设计公司11 小时前
兰亭妙微ui设计公司分享:B端组件命名如何支持团队协作
前端·javascript·vue.js
云和数据.ChenGuang12 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain