flutter - Admob 的广告加载 Flutter 时视频卡住

标签 flutter admob video-streaming ads

大家好。我是 flutter 新手。我想在我的应用程序中实现 Admob 广告。基本上我的应用程序是关于新闻直播的。 每当广告加载时,音频工作正常,但视频有延迟。 谁能帮我解决这个问题吗?

大家好。我是 flutter 新手。我想在我的应用程序中实现 Admob 广告。基本上我的应用程序是关于新闻直播的。 每当广告加载时,音频工作正常,但视频有延迟。 谁能帮我解决这个问题吗?

大家好。我是 flutter 新手。我想在我的应用程序中实现 Admob 广告。基本上我的应用程序是关于新闻直播的。 每当广告加载时,音频工作正常,但视频有延迟。 谁能帮我解决这个问题吗?

import 'package:better_player/better_player.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

class StreamPlayer extends StatefulWidget {
  final String channelURL;
  final String channelName;
  final String channelImage;
  StreamPlayer(
      {@required this.channelURL,
      @required this.channelName,
      @required this.channelImage});
  @override
  _StreamPlayerState createState() => _StreamPlayerState();
}

class _StreamPlayerState extends State<StreamPlayer> {
  BetterPlayerController _controller;
  BannerAd _bannerAd;
  bool _isBannerAdReady = false;

  @override
  void initState() {
    super.initState();
    playerConfig();
    getBanner();
  }

  playerConfig() {
    BetterPlayerDataSource betterPlayerDataSource = BetterPlayerDataSource(
        BetterPlayerDataSourceType.network, widget.channelURL,
        liveStream: true);
    _controller = BetterPlayerController(
        BetterPlayerConfiguration(
          aspectRatio: 16 / 9,
          autoDetectFullscreenDeviceOrientation: true,
          autoPlay: true,
        ),
        betterPlayerDataSource: betterPlayerDataSource);
  }

  getBanner() {
    _bannerAd = BannerAd(
      adUnitId: 'ca-app-pub-3940256099942544/6300978111', //Ad for Testing
      request: AdRequest(),
      size: AdSize.banner,
      listener: AdListener(
        onAdLoaded: (ad) {
          setState(() {
            _isBannerAdReady = true;
          });
        },
        onAdFailedToLoad: (ad, err) {
          print('Failed to load a banner ad: ${err.message}');
          _isBannerAdReady = false;
          ad.dispose();
        },
      ),
    );
    return _bannerAd.load();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          centerTitle: true,
          backgroundColor: Colors.transparent,
          elevation: 0,
          title: Container(
            width: 200,
            height: 45,
            decoration: BoxDecoration(
                color: Colors.blueAccent.withOpacity(0.3),
                borderRadius: BorderRadius.all(Radius.circular(30))),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                CachedNetworkImage(
                    imageUrl: widget.channelImage,
                    width: 25,
                    height: 25,
                    fit: BoxFit.contain,
                    placeholder: (context, url) => Icon(
                          Icons.image,
                          size: 25,
                        ),
                    errorWidget: (context, url, error) => Icon(
                          Icons.image,
                          size: 50,
                        )),
                SizedBox(
                  width: 15,
                ),
                Text(widget.channelName,
                    style: GoogleFonts.teko(
                      color: Theme.of(context).primaryColor == Colors.blue
                          ? Colors.black54
                          : Colors.grey[50],
                      fontSize: 22,
                      fontWeight: FontWeight.w600,
                    )),
                SizedBox(
                  width: 5,
                ),
              ],
            ),
          )),
      body: Container(
        child: Column(
          children: [
            Center(
              child: BetterPlayer(
                controller: _controller,
              ),
            ),
            _isBannerAdReady
                ? Container(
                    height: 100,
                    child: AdWidget(ad: _bannerAd),
                  )
                : Container(),
          ],
        ),
      ),
    );
  }
}

最佳答案

我知道已经太晚了。只是发在这里给其他人引用。 因为我因此浪费了很多时间。

当我将视频播放器与 google_mobile_ads 广告库结合使用时,我也遇到了同样的问题

所以我只是切换到视频页面上的 native_admob_flutter 广告库。 并且运行良好。

希望这会节省其他人的一些时间。

关于flutter - Admob 的广告加载 Flutter 时视频卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67800413/

相关文章:

Flutter - 使用相同的提供者更新下拉列表并将数据发送到另一个小部件

android - 将 MobFox 添加到 Android 上的 AdMob

android - 为什么中介测试套件找不到横幅广告的 Adcolony 广告来源?

flash - 将 Flash 中的视频录制到本地文件

android - Flutter Android TV 应用水平 ListView 点击项目问题

dart - Flutter 的高效 ExpandableListView 实现

android - 我们是否需要在 AndroidManifest.xml 中添加元数据标签才能使用 Admob?

c++ - 限制通过c++中的套接字传输的数据

php - 基于 PHP 通过 HTTP 从录制文件流式传输实时视频

flutter - 如何将整个 flutter 屏幕转换为 pdf?