首页 > 解决方案 > 如何使用 Flutter 从 IP 地址流式传输实时视频?

问题描述

我正在探索现有的 Flutter 包来播放视频文件。Flutter 视频播放器示例和 Chewie 包的示例可以正常播放来自 Internet 地址的视频文件。但是,我正在尝试从我的计算机网络摄像头流式传输数据,为此,我按照示例流式传输 Raspberry 摄像头视频,该视频使用 VLC 的视频流包 https://www.youtube.com/watch?v=tPcuBo5QAW4

我在我的 Linux 笔记本电脑和浏览器 ( http://192.168.2.19:8081 ) 上启动“运动”命令,我可以看到网络摄像头视频。现在我尝试使用与视频中相同的示例,但是,我看不到任何流式视频。可以在此处找到安装此命令的说明。以下是我的代码:

import 'package:flutter/material.dart';
import 'package:flutter_vlc_player/vlc_player.dart';
import 'package:flutter_vlc_player/vlc_player_controller.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'WebCam Stream'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _streamUrl;
  VlcPlayerController _vlcViewController;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _vlcViewController = new VlcPlayerController();
  }

  void _incrementCounter() {
    setState(() {
      _streamUrl = (_streamUrl != null) ? null : 'http://192.168.2.19:8081';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SingleChildScrollView(
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              _streamUrl == null
                  ? Container(
                      child: Center(
                        child: RichText(
                          text: TextSpan(children: [
                            TextSpan(
                              text: 'Stream Closed',
                              style: TextStyle(
                                  fontSize: 14.0,
                                  fontWeight: FontWeight.bold,
                                  color: Colors.white,
                                  background: Paint()..color = Colors.red),
                            )
                          ]),
                        ),
                      ),
                    )
                  : Expanded(
                      child: new VlcPlayer(
                        defaultHeight: 480,
                        defaultWidth: 640,
                        url: _streamUrl,
                        controller: _vlcViewController,
                        placeholder: Container(
                          width: 640,
                          height: 480,
                        ),
                      ),
                    )
            ],
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(_streamUrl == null ? Icons.play_arrow : Icons.pause),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

请帮我解决这个问题。

标签: fluttervideostreamipwebcam

解决方案


推荐阅读