e***@outlook.com
e***@outlook.com
  • 发布:2022-01-10 16:49
  • 更新:2022-01-12 10:54
  • 阅读:934

【报Bug】nvue android机型LivePusher推流失败

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 最新

HBuilderX类型: 正式

HBuilderX版本号: 3.3.5

手机系统: Android

手机系统版本号: Android 10

手机厂商: 小米

手机机型: 8

页面类型: nvue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

按文档使用安卓调用livepusher

预期结果:

推拉流正常

实际结果:

安卓推拉流异常

bug描述:

IOS推流正常也能播放
小米8推流不上去,报错TCP连接失败,然后尝试,最后失败
小米10/华为 能推流,虽然flv.js能够播放,但是flv直播流时间戳是有问题的直播流数据是有紊乱的

2022-01-10 16:49 负责人:DCloud_Android_DQQ 分享
已邀请:
DCloud_Android_DQQ

DCloud_Android_DQQ

我来处理。稍等一下

DCloud_Android_DQQ

DCloud_Android_DQQ

你先试一下 uni推流的测试地址。 看一下有没有这个问题
https://ask.dcloud.net.cn/article/39482

DCloud_Android_DQQ

DCloud_Android_DQQ

你发一下你测试的示例代码。 我按照你提供的操作步骤。 android ios 都不能正常使用和播放

e***@outlook.com

e***@outlook.com (作者)

<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>  
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

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

e***@outlook.com (作者)

还有几个问题
1 startPreview必须写个定时器500毫秒后执行,不然安卓就无法预览,IOS可以直接调用
2 首次打开app要权限,这个摄像头预览没办法自动展示,uni也没提供一个权限申请成功的回调方法,让我触发调用startPreview

e***@outlook.com

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&timestamp=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 (作者)

我本地网络很好,但是不管是我的流媒体还是你提供的,都会有几率出现这个问题

e***@outlook.com

e***@outlook.com (作者)

测试 华为MED-AL00 安卓10 无法推流

推你们提供的服务器 流TCP断开,带宽不足 无法推上去
推我的服务器 流TCP断开 自动重连 然后仍然失败 无法推上去

同一时间用obs推流,就一切正常,说明你们服务器不是带宽有问题

该问题目前已经被锁定, 无法添加新回复