<template>
<view class="container" :style="{ height: height }">
<live-pusher mode="FHD" id="livePusher" ref="livePusher" class="livePusher" :url="url"
:orientation="orientation" :auto-focus="true" :beauty="beauty" :whiteness="beauty"
@statechange="statechange" @netstatus="netstatus" @error="error"></live-pusher>
<view class="box">
<view v-if="status === 0" class="start-btn" @click="start">
<view class="start-btn-inner"></view>
</view>
</view>
<view class="box">
<view v-if="status === 1" class="stop-btn" @click="stop">
<view class="stop-btn-inner"></view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
url: "",
status: 0,
beauty: 0,
orientation: "vertical"
};
},
created() {
this.height = `${uni.getSystemInfoSync().windowHeight}px`;
},
onReady() {
plus.device.setWakelock(true);
this.context = uni.createLivePusherContext("livePusher", this);
setTimeout(() => {
this.context.startPreview();
}, 500)
this.context.startPreview();
this.url = 'rtmp://81.70.104.12:18881/live/ouzz'
},
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.status = 1;
this.context.start({
success: (a) => {
},
});
},
stop: function() {
this.status = 0;
this.context.stop({
success: (a) => {
this.context.startPreview();
},
});
},
},
};
</script>
<style>
.container {
width: 750rpx;
}
.logout {
position: absolute;
left: 50rpx;
top: 100rpx;
}
.logout-img {
width: 50rpx;
height: 50rpx;
}
.livePusher {
flex: 1;
}
.icons {
position: absolute;
right: 0rpx;
top: 100rpx;
align-items: center;
width: 150rpx;
}
.btn-box {
align-items: center;
margin-bottom: 40rpx;
}
.btn-img {
width: 40rpx;
height: 40rpx;
margin-bottom: 4rpx;
}
.btn-text {
color: #fff;
font-size: 26rpx;
}
.live-btn-container {
position: absolute;
bottom: 100rpx;
width: 750rpx;
padding: 0 40rpx;
}
.box {
bottom: 140rpx;
position: absolute;
width: 750rpx;
display: flex;
align-items: center;
justify-content: center;
}
.start-btn {
width: 160rpx;
height: 160rpx;
border-radius: 100%;
border: 10rpx solid #fff;
position: relative;
}
.start-btn-inner {
width: 120rpx;
height: 120rpx;
border-radius: 100%;
background: red;
position: absolute;
left: 90rpx;
top: 90rpx;
transform: translateX(-80rpx) translateY(-80rpx);
}
.stop-btn {
width: 160rpx;
height: 160rpx;
border-radius: 100%;
border: 10rpx solid #fff;
position: relative;
}
.stop-btn-inner {
width: 60rpx;
height: 60rpx;
border-radius: 16rpx;
background: red;
position: absolute;
left: 150rpx;
top: 150rpx;
transform: translateX(-110rpx) translateY(-110rpx);
}
</style>
10 个回复
DCloud_Android_DQQ
我来处理。稍等一下
DCloud_Android_DQQ
你先试一下 uni推流的测试地址。 看一下有没有这个问题
https://ask.dcloud.net.cn/article/39482
DCloud_Android_DQQ
你发一下你测试的示例代码。 我按照你提供的操作步骤。 android ios 都不能正常使用和播放
e***@outlook.com (作者)
e***@outlook.com (作者)
我改用的你们的推流地址
rtmp://81.70.104.12:18881/live/ouzz
对应的拉流地址为
http://81.70.104.12:8080/live/ouzz.flv
e***@outlook.com (作者)
补充一下
1 是nvue页面
2 我用obs对rtmp://81.70.104.12:18881/live/ouzz推过流了,在http://jessibuca.monibuca.com/player.html的网页播放器播放
http://81.70.104.12:8080/live/ouzz.flv也是没问题的,你们的流媒体是正常的
DCloud_Android_DQQ
用我们的是测试服务器,推流没问题是吧
2022-01-11 18:02
e***@outlook.com (作者)
回复 DCloud_Android_DQQ: 我是说用obs 推流可以,用安卓app偶尔推不上去
2022-01-11 18:44
e***@outlook.com (作者)
回复 DCloud_Android_DQQ: 有问题的,小米10有时候推的挺好,有时候就不行了,控制台报错说你们服务器网络带宽不够,但是我又换obs就一切正常
2022-01-11 18:59
DCloud_Android_DQQ
回复 e***@outlook.com: 这个问题很难界定。 那小小米8 推不上去有报错日志吗。
2022-01-11 19:17
e***@outlook.com (作者)
我用小米8推你们的流 100%复现,就推上去,拉流播放就有问题
2022-01-11 19:43
e***@outlook.com (作者)
同样的代码run到IOS就可以,推拉就都是正常的
2022-01-11 19:44
DCloud_Android_DQQ
回复 e***@outlook.com: 那重点说说小米8的问题吧。 我这边手头确实没有小米8的手机。 你那边报错有错误日志吗。不要贴上面那种日志。没意义
2022-01-11 19:47
e***@outlook.com (作者)
回复 DCloud_Android_DQQ: 可以看一下下面的回复贴图,我明天再找几台开发机试试,你可以试试我上面的代码吗
2022-01-11 20:13
e***@outlook.com (作者)
还有几个问题
1 startPreview必须写个定时器500毫秒后执行,不然安卓就无法预览,IOS可以直接调用
2 首次打开app要权限,这个摄像头预览没办法自动展示,uni也没提供一个权限申请成功的回调方法,让我触发调用startPreview
e***@outlook.com (作者)
数据有问题,时间戳一会高一会低,所以播放才有问题,100%是推流的问题,和流媒体没关系
DCloud_Android_DQQ
好。 这个时间戳的问题 我这边应该可以复现。我先看看这个。 稍后给你回复
2022-01-12 11:45
e***@outlook.com (作者)
回复 DCloud_Android_DQQ: 我知道为什么了 ,编辑器吃掉了推流地址的&符号 推流地址不正确导致你推流报错,我重新发你
rtmp://139.224.42.11:1935/live/1?sign=85595DF32F2E81BF4EAACD5BE1A4EB0D44ED75FE×tamp=1641962001939&nonce=Va1BBIn1sLiMe0wZbqLew
http://139.224.42.11:8080/live/1.flv
2022-01-12 12:39
e***@outlook.com (作者)
能推上去,拉flv直播流的pts有问题导致无法观看播放
2022-01-12 12:40
e***@outlook.com (作者)
回复 e***@outlook.com: 对了 你的服务器没问题,有问题的是我的流媒体服务,我这边flv的时间戳出来就是有问题
2022-01-12 13:19
DCloud_Android_DQQ
回复 e***@outlook.com: OK 那就是没问题了是吧。 麻烦帮忙把解决问题的结果下面简单回复一下。 后续如果如果有人踩到类似的坑可以避免。
2022-01-12 19:50
e***@outlook.com (作者)
回复 DCloud_Android_DQQ: 我用的zlmmediaserver 拉的flv直播流的时间戳有问题导致的,其实现在还不确定是推流的问题还是流媒体的问题
2022-01-13 11:46
e***@outlook.com (作者)
我本地网络很好,但是不管是我的流媒体还是你提供的,都会有几率出现这个问题
e***@outlook.com (作者)
测试 华为MED-AL00 安卓10 无法推流
推你们提供的服务器 流TCP断开,带宽不足 无法推上去
推我的服务器 流TCP断开 自动重连 然后仍然失败 无法推上去
同一时间用obs推流,就一切正常,说明你们服务器不是带宽有问题