牧歌ing 2024-07-19 18:25 采纳率: 50%
浏览 28

flvjs,请求流的时候vhasAudio设为true,后端推过来的流如果没有视频就会黑屏

flvjs,请求流的时候vhasAudio设为true,后端推过来的流如果没有音频就会黑屏,这个怎么解决


```html
if (flvjs.isSupported()) {
                    flvPlayer = flvjs.createPlayer({
                        type: 'flv',
                        url: data.info,
                        cors: true,
                        isLive: true,
                        vhasAudio:true,
                        withCredentials: false
                    }, {
                        enableWorker: false,
                        enableStashBuffer: false,  // 关闭IO隐藏缓冲区
                        autoCleanupSourceBuffer: true,
                    });

                      flvPlayer.attachMediaElement(videoElement);
                      flvPlayer.load();
                }

```

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-19 18:25
    关注

    引自免费微信小程序:皆我百晓生

    我明白你的困扰是关于使用FLV.js时遇到的问题。你提到当后端推送的流没有对应的音频或视频时,会出现黑屏问题。这可能是因为你在初始化播放器时设定了vhasAudio: true,这意味着播放器预期接收到的流是包含音频的。如果实际接收到的流没有音频,可能会出现你描述的问题。

    解决这个问题的一个可能的方法是,在创建播放器实例之前,先检查后端提供的流的详细信息,确认它是否包含音频或视频。如果流包含音频,则可以设置vhasAudio: true;如果不包含音频,则可以不设置或设置为false。这个过程可以通过检查后端返回的数据或流的元数据来实现。如果后端接口提供了这方面的信息,你可以使用这个信息来动态地创建播放器实例。例如:

    if (flvjs.isSupported()) {
        let streamInfo = getStreamInfoFromBackend(); // 从后端获取流信息的函数
        let audioExists = streamInfo.audioExists; // 检查流是否包含音频
        let videoElement = document.getElementById('videoElement'); // 获取视频元素引用
        let options = {
            type: 'flv',
            url: data.info,
            cors: true,
            isLive: true,
            withCredentials: false
        };
        if (audioExists) {
            options['vhasAudio'] = true; // 如果包含音频,则设置vhasAudio为true
        }
        let flvPlayer = flvjs.createPlayer(options); // 创建播放器实例
        flvPlayer.attachMediaElement(videoElement); // 将播放器与视频元素关联
        flvPlayer.load(); // 加载流
    }
    

    上面的代码示例中的 getStreamInfoFromBackend() 是一个假设的函数,你需要根据你的后端接口实现这个函数来获取流的详细信息。如果后端没有提供这样的接口或信息,你可能需要基于其他方式来推测流是否包含音频(例如基于文件扩展名或其他逻辑)。需要注意的是,最佳的做法仍然是尽量让后端提供明确的流信息,这样前端可以据此做出更准确的决策。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月19日

悬赏问题

  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题