今天实现一下直播推流和拉流。服务器端使用opencloudos8系统。顺便把我之前写的小系统弄上去跑跑,搭建个git服务器,使用ssh协议,密钥方式。
先展示一下在iphone上推流效果图
再展示下在谷歌浏览器上的拉流效果图,safari浏览器和微信浏览器效果都是差不多
再展示下在百度小程序上的拉流效果图
实现推流,新建uniapp项目,命名为app,为何要新建uniapp项目啊,不想写条件编译,单独出负责app模块更加清晰。新建live-pusher.nvue,同时弄个同名文件夹。在index.vue里面写个跳转
<navigator url="live-pusher/live-pusher" hover-class="navigator-hover">
<button type="default">实时音视频录制</button>
</navigator>
在live-pusher.nvue里面编写
<template>
<view>
<live-pusher id='livePusher' ref="livePusher" class="livePusher" url="这里填写服务器访问地址"
mode="SD" :muted="false" :enable-camera="true" :auto-focus="true"
aspect="9:16" @statechange="statechange" @netstatus="netstatus" @error = "error"
></live-pusher>
<button class="btn" @click="start">开始推流</button>
<button class="btn" @click="pause">暂停推流</button>
<button class="btn" @click="resume">resume</button>
<button class="btn" @click="stop">停止推流</button>
<button class="btn" @click="snapshot">快照</button>
<button class="btn" @click="startPreview">开启摄像头预览</button>
<button class="btn" @click="stopPreview">关闭摄像头预览</button>
<button class="btn" @click="switchCamera">切换摄像头</button>
</view>
</template>
<script>
export default {
data() {
return {}
},
onReady() {
// 注意:需要在onReady中 或 onLoad 延时
this.context = uni.createLivePusherContext("livePusher", this);
},
methods: {
statechange(e) {
console.log("statechange:" + JSON.stringify(e));
},
netstatus(e) {
console.log("netstatus:" + JSON.stringify(e));
},
error(e) {
console.log("error:" + JSON.stringify(e));
},
start: function() {
this.context.start({
success: (a) => {
console.log("livePusher.start:" + JSON.stringify(a));
},
fail: (err) => {
console.log('推流失败:', err);
}
});
},
close: function() {
this.context.close({
success: (a) => {
console.log("livePusher.close:" + JSON.stringify(a));
}
});
},
snapshot: function() {
this.context.snapshot({
success: (e) => {
console.log(JSON.stringify(e));
}
});
},
resume: function() {
this.context.resume({
success: (a) => {
console.log("livePusher.resume:" + JSON.stringify(a));
}
});
},
pause: function() {
this.context.pause({
success: (a) => {
console.log("livePusher.pause:" + JSON.stringify(a));
}
});
},
stop: function() {
this.context.stop({
success: (a) => {
console.log(JSON.stringify(a));
}
});
},
switchCamera: function() {
this.context.switchCamera({
success: (a) => {
console.log("livePusher.switchCamera:" + JSON.stringify(a));
}
});
},
startPreview: function() {
this.context.startPreview({
success: (a) => {
console.log("livePusher.startPreview:" + JSON.stringify(a));
}
});
},
stopPreview: function() {
this.context.stopPreview({
success: (a) => {
console.log("livePusher.stopPreview:" + JSON.stringify(a));
}
});
}
}
}
</script>
<style>
</style>
注意改写live-pusher组件的url,由于服务器实现方法多样,大家改成各自的服务器地址,另外把声音开了,:muted="false"
拉流就以百度小程序拉流代码为例
新建uniapp项目,命名为baidu。再新建live-player.vue文件,也建立同名文件夹。在index.vue里面也写个跳转
<navigator url="live-player/live-player" hover-class="navigator-hover">
<button type="default">实现音视频播放</button>
</navigator>
在live-player.vue文件里面编写
<template>
<view>
<live-player
src="这里写服务器端地址"
autoplay
@statechange="statechange"
@error="error"
style="width: 300px; height: 225px;"
/>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
注意live-player组件的src写入各自服务器地址