Как поместить видео в реальном времени внутрь контейнера с помощью флаттера?

Я новичок в flutter, и я читал кое-что об этом, у меня средний уровень знаний об этом, мой вопрос: как мне разместить живое видео из api?

import 'package:flutter_webrtc/flutter_webrtc.dart';

.....
final videocolumn = Container(
    padding: EdgeInsets.only(top: 5),
    width: globals.screenWidth * 0.96,
    decoration: BoxDecoration(
        borderRadius:BorderRadius.circular(20),
        border: Border.all(color: Colors.grey,width: 1.0,),
        ),
    child: Column(
      children: [
          Container(
            height: globals.screenHeight * 0.25,
             // get the live video from the api
          ),
       ]
    ),
);

pubspec.yaml

dependencies:
  http: ^0.12.2
  flutter_section_table_view: ^1.0.3
  page_transition: ^1.1.7+6
  path_provider: ^1.6.24
  cupertino_icons: ^1.0.0
  flutter_webrtc: ^0.5.8
  flutter:
    sdk: flutter

Приведите пример с использованием моего кода

именно так

введите описание изображения здесь


person Community    schedule 07.02.2021    source источник
comment
Вы пробовали это: github.com/flutter-webrtc/flutter-webrtc   -  person Shubhamhackz    schedule 17.02.2021
comment
Привет @Shubhamhackz, я уже видел это в github, но я не могу следовать, так как код для меня настолько продвинутый. я просто хочу этот простой код, которому я могу следовать   -  person    schedule 17.02.2021
comment
Откуда вы берете видео? Ваш собственный сервер или сервисы, такие как агора?   -  person Shubhamhackz    schedule 17.02.2021
comment
@Shubhamhackz скоро я сделаю собственный сервер, но пока мне просто нужны такие сервисы, как агора или мультиплексор, или что-нибудь, что легко понять и понять   -  person    schedule 17.02.2021
comment
Это может быть полезно: medium.com/flutter -сообщество /   -  person Shubhamhackz    schedule 17.02.2021
comment
@Shubhamhackz Я уже видел это, но я не знаю, как вставить этот код в свой проект   -  person    schedule 17.02.2021


Ответы (3)


Вот полный код и пример для воспроизведения видео с помощью API. Я думаю, это должно тебе помочь.

person Preet Shah    schedule 17.02.2021
comment
Как насчет того, чтобы когда приложение открыто, видео в реальном времени воспроизводится автоматически? - person ; 17.02.2021
comment
Вам нужно будет это проверить. Однако я думаю, что это сработает. - person Preet Shah; 17.02.2021

Вы можете использовать плагин chewie.

    import 'package:chewie/chewie.dart';
final videoPlayerController = VideoPlayerController.network(
    'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');

await videoPlayerController.initialize();

final chewieController = ChewieController(
  videoPlayerController: videoPlayerController,
  autoPlay: true,
  looping: true,
);

final playerWidget = Chewie(
  controller: chewieController,
);

не забудьте избавиться от виджета контроллера

    @override
void dispose() {
  videoPlayerController.dispose();
  chewieController.dispose();
  super.dispose();
}
person CharlyKeleb    schedule 17.02.2021
comment
Рекомендуется ли плагин chewie для прямой трансляции через API? - person ; 17.02.2021
comment
Если вы говорите о видео в прямом эфире, я думаю, что лучший плагин для этого - лучший плеер, но chewie хорош для воспроизведения видео из сети - person CharlyKeleb; 17.02.2021
comment
pub.dev/packages/better_player - person CharlyKeleb; 17.02.2021

/ * Чтобы создать и инициализировать VideoPlayerController, выполните следующие действия:

  1. Создайте StatefulWidget с сопутствующим классом State

  2. Добавьте переменную в класс State для хранения VideoPlayerController

  3. Добавьте переменную в класс State для хранения будущего, возвращенного из

  4. VideoPlayerController.initialize Создайте и инициализируйте контроллер в методе initState

  5. Утилизируйте контроллер методом утилизации * /

     import 'dart:async';
     import 'package:flutter/material.dart';
     import 'package:video_player/video_player.dart';
    
     void main() => runApp(VideoPlayerApp());
    
     class VideoPlayerApp extends StatelessWidget {
       @override
       Widget build(BuildContext context) {
         return MaterialApp(
           title: 'Video Player Demo',
           home: VideoPlayerScreen(),
         );
       }
     }
    
     class VideoPlayerScreen extends StatefulWidget {
       VideoPlayerScreen({Key key}) : super(key: key);
    
       @override
       _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
     }
    
     class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
       VideoPlayerController _controller;
       Future<void> _initializeVideoPlayerFuture;
    
       @override
       void initState() {
         // Create and store the VideoPlayerController. The VideoPlayerController
         // offers several different constructors to play videos from assets, files,
         // or the internet.
         _controller = VideoPlayerController.network(
           'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4',
         );
    
         // Initialize the controller and store the Future for later use.
         _initializeVideoPlayerFuture = _controller.initialize();
    
         // Use the controller to loop the video.
         _controller.setLooping(true);
    
         super.initState();
       }
    
       @override
       void dispose() {
         // Ensure disposing of the VideoPlayerController to free up resources.
         _controller.dispose();
    
         super.dispose();
       }
    
       @override
       Widget build(BuildContext context) {
         return Scaffold(
           appBar: AppBar(
             title: Text('Butterfly Video'),
           ),
           // Use a FutureBuilder to display a loading spinner while waiting for the
           // VideoPlayerController to finish initializing.
           body: FutureBuilder(
             future: _initializeVideoPlayerFuture,
             builder: (context, snapshot) {
               if (snapshot.connectionState == ConnectionState.done) {
                 // If the VideoPlayerController has finished initialization, use
                 // the data it provides to limit the aspect ratio of the video.
                 return AspectRatio(
                   aspectRatio: _controller.value.aspectRatio,
                   // Use the VideoPlayer widget to display the video.
                   child: VideoPlayer(_controller),
                 );
               } else {
                 // If the VideoPlayerController is still initializing, show a
                 // loading spinner.
                 return Center(child: CircularProgressIndicator());
               }
             },
           ),
    

    / * Воспроизведение и пауза видео По умолчанию видео запускается в приостановленном состоянии. Чтобы начать воспроизведение, вызовите метод play (), предоставленный VideoPlayerController. Чтобы приостановить воспроизведение, вызовите метод pause (). В этом примере добавьте в приложение элемент FloatingActionButton, который отображает значок воспроизведения или паузы в зависимости от ситуации. Когда пользователь нажимает кнопку, воспроизводится видео, если оно приостановлено, или приостанавливается, если оно воспроизводится. * /

           floatingActionButton: FloatingActionButton(
             onPressed: () {
               // Wrap the play or pause in a call to `setState`. This ensures the
               // correct icon is shown.
               setState(() {
                 // If the video is playing, pause it.
                 if (_controller.value.isPlaying) {
                   _controller.pause();
                 } else {
                   // If the video is paused, play it.
                   _controller.play();
                 }
               });
             },
             // Display the correct icon depending on the state of the player.
             child: Icon(
               _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
             ),
           ), // This trailing comma makes auto-formatting nicer for build methods.
         );
       }
     }
    
person Faakhir    schedule 24.02.2021