网络摄像头仅在我锁定和解锁智能手机时有效

问题描述 投票:0回答:1

我正在按照 this 教程使用 flutter_webrtc 插件在 Flutter 中做一个简单的演示应用程序。当我使用 Chrome 进行测试时,它工作得很好,在模拟器中,相机图像从不显示,而当我在我的 Android 智能手机上测试时,相机图像仅在我锁定(电源按钮)和解锁(再次电源按钮)设备时出现。

我正在使用 Windows 11、Android Studio 2022.1.1 补丁 1、Flutter 3.7.5、Dart 2.19.1 OpenJDK 19.0.2 和 flutter_webrtc 0.9.23.

现在我的代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _localVideoRenderer = RTCVideoRenderer();

  void initRenderers() async {
    await _localVideoRenderer.initialize();
  }

  _getUserMedia() async {
    final Map<String, dynamic> mediaConstraints = {
      'audio': true,
      'video': true,
    };

    MediaStream stream =
    await navigator.mediaDevices.getUserMedia(mediaConstraints);
    _localVideoRenderer.srcObject = stream;

    _localVideoRenderer.srcObject = stream;
    return stream;
  }

  @override
  void initState() {
    initRenderers();
    _getUserMedia();
    super.initState();
  }

  @override
  void dispose() async {
    await _localVideoRenderer.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final ButtonStyle style =
    ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));


    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Stack(
        children: [
          Positioned(
              top: 0.0,
              right: 0.0,
              left: 0.0,
              bottom: 0.0,
              child: RTCVideoView(_localVideoRenderer))
        ],
      ),
    );
  }
}

我已经尝试在多个平台上进行测试,已经尝试调用在按钮上显示相机图像的方法,并且已经尝试使用其他教程。

android flutter dart webrtc webrtc-android
1个回答
0
投票

这个好像跟flutter状态管理有关,我补充一下:

setState(() {
});

srcObject = stream
之后它起作用了!

© www.soinside.com 2019 - 2024. All rights reserved.