Code Monkey home page Code Monkey logo

video_player_win's Introduction

video_player_win

Flutter video player for Windows, lightweight, using Windows built-in Media Foundation API. Windows implementation of the video_player plugin.

Platform Support

This package itself support only Windows.

But use it with video_player, your app can support Windows / Android / iOS / Web at the same time.

Built-in control panel & Fullscreen & Subtitle support

Please use package video_player_control_panel instead.

Which also use this package to play video on Windows.

Features & Limitations

Features:

  • GPU hardware acceleration, low CPU usage (maybe support 4K 60fps video?)
  • No GPL / LGPL 3rd-party libraries inside.
  • Only one dll file (~180 KB) added as a plugin.
  • Support Windows / Android / iOS / Web by collaboration with video_player

Limitations:

  • This package doesn't support HLS (.m3u8)

But, since this package use Microsoft Media Foundation API, there are some limtations:

  • Playback will use codecs preloaded in Windows OS. If you want to play some video format that not supported by these preloaded codecs, you need to install 3rd-party codecs exe file, about 18 MB. (see the next section).

Supported Formats in Windows (Important !)

Ref: Windows preloaded codec list

This package use Windows built-in Media Foundation API. So playback video will use the codecs preload in your Windows environment. All the media format can be played by WMP (Windows Media Player) can also be played by this package. However, the preloaded codecs in Windows is limited.

If you have a media file cannot played by this package, ALSO CANNOT played by WMP (Windows Media Player), it means that this media file is not support by codecs preloaded in your Windows.

In this case, please install ONE of the following codec pack into your Windows:

You can auto-install codec by the following Dart code:

import 'dart:io';

Process.run('E:\\K-Lite_Codec_Pack_1730_Basic.exe', ['/silent']).then((value) {
  if (value.exitCode == 0) log("installation success");
  else log("installation failed");
});

After install the codec pack, most of the media format are supported.

Supported AV1 video

To play AV1 video,

You can silently auto-install codec by the following Dart code:

import 'dart:io';

Process.run('powershell', ['Add-AppxPackage', '-Path', 'E:\\av1-video-extension-1-1-52851-0.appx']).then((value) {
  if (value.exitCode == 0) log("installation success");
  else log("installation failed");
});

Problem shootting for building fail

If you build fail with this package, and the error message has the keyword "MSB3073":

  • run "flutter build windows" in command line in [Administrator] mode

Quick Start

Installation

Add this to your package's pubspec.yaml file:

dependencies:
  video_player: ^2.5.1
  video_player_win: ^2.0.0

Or

dependencies:
  video_player: ^2.5.1
  video_player_win:
    git:
      url: https://github.com/jakky1/video_player_win.git
      ref: master

Usage

video / audio playback

Play from network source:

var controller = VideoPlayerController.network("https://www.your-web.com/sample.mp4");
controller.initialize().then((value) {
  if (controller.value.isInitialized) {
    controller.play();
  } else {
    log("video file load failed");
  }
}).catchError((e) {
  log("controller.initialize() error occurs: $e");
});

Play from file:

var controller = VideoPlayerController.file(File("E:\\test.mp4"));

If the file is a video, build a display widget to show video frames:

Widget build(BuildContext context) {
  return VideoPlayer(controller);
}

operations

  • Play: controller.play();
  • Pause: controller.pause();
  • Seek: controller.seekTo( Duration(minute: 10, second:30) );
  • set playback speed: (normal speed: 1.0) controller.setPlaybackSpeed(1.5);
  • set volume: (max: 1.0 , mute: 0.0) controller.setVolume(0.5);
  • set looping: controller.setLooping(true);
  • free resource: controller.dispose();

Listen playback events and values

void onPlaybackEvent() {
	final value = controller.value;
	// value.isInitialized (bool)
	// value.size (Size, video size)
	// value.duration (Duration)
	// value.isPlaying (bool)
	// value.isBuffering (bool)
	// value.isCompleted (bool)
	// value.position (Duration)
}
controller.addListener(onPlaybackEvent);
...
controller.removeListener(onPlaybackEvent); // remember to removeListener()

Release resource

controller.dispose();

standalone mode

If your app only runs on Windows, and you want to remove library dependencies as many as possible, you can modify pubspec.yaml file:

dependencies:
  # video_player: ^2.4.7 # mark this line, for Windows only app
  video_player_win: ^1.0.1

and modify all the following class name in your code:

VideoPlayer -> WinVideoPlayer  // add "Win" prefix
VideoPlayerController -> WinVideoPlayerController  // add "Win" prefix

just only modify class names. All the properties / method are the same with video_player

Example

import 'dart:developer';
import 'dart:io';

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  late VideoPlayerController controller;

  @override
  void initState() {
    super.initState();
    controller = VideoPlayerController.file(File("E:\\test_youtube.mp4"));
    controller.initialize().then((value) {
      if (controller.value.isInitialized) {
        controller.play();
        setState(() {});
      } else {
        log("video file load failed");
      }
    });
  }

  @override
  void dispose() {
    super.dispose();
    controller.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('video_player_win example app'),
        ),

        body: Stack(children: [
          VideoPlayer(controller),
          Positioned(
            bottom: 0,
            child: Column(children: [
              ValueListenableBuilder(
                valueListenable: controller,
                builder: ((context, value, child) {
                  int minute = controller.value.position.inMinutes;
                  int second = controller.value.position.inSeconds % 60;
                  return Text("$minute:$second", style: Theme.of(context).textTheme.headline6!.copyWith(color: Colors.white, backgroundColor: Colors.black54));
                }),
              ),
              ElevatedButton(onPressed: () => controller.play(), child: const Text("Play")),
              ElevatedButton(onPressed: () => controller.pause(), child: const Text("Pause")),
              ElevatedButton(onPressed: () => controller.seekTo(Duration(milliseconds: controller.value.position.inMilliseconds+ 10*1000)), child: const Text("Forward")),
            ])),
        ]),
      ),
    );
  }
}

video_player_win's People

Contributors

ipliu avatar jakky1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

video_player_win's Issues

Cannot play files with Chinese names

video_player_win: ^1.1.5

image

 Flutter (Channel stable, 3.7.3, on Microsoft Windows [版本 10.0.19044.2604], locale zh-CN)
    • Flutter version 3.7.3 on channel stable at D:\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 9944297138 (7 days ago), 2023-02-08 15:46:04 -0800
    • Engine revision 248290d6d5
    • Dart version 2.19.2
    • DevTools version 2.20.1

Crashes when playing AV1 video

When trying to play a video with the AV1 codec it crashes the app, it is working fine with Windows Media player.

I have installed the AV1 codec from the Microsoft Store, before that it would just not play the video.

[BUG] Load video file if flac audio in mp4

After update to flutter 3.10 No related to flutter 3.10
video player always failed to load video file.
VideoPlayerController.initialize didn't throw the error, the win plugin only printed

[video_player_win] load fail, reload now
[log] [video_player_win] playback event: error

Since the error is not thrown, the app will treat it as initiated and playing(though it is errored). when calling pause. it will throw

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Invalid argument(s): video file not opened yet
#0      WinVideoPlayerController.pause         video_player_win.dart:200
#1      WindowsVideoPlayer.pause               video_player_win_plugin.dart:77
#2      VideoPlayerController._applyPlayPause  video_player.dart:555
#3      VideoPlayerController.pause            video_player.dart:516

Maybe errored before 3.10

nuget.exe failed

CMake Error at flutter/ephemeral/.plugin_symlinks/video_player_win/windows/CMakeLists.txt:35 (message):
Integrity check for
D:/workspace/app/build/windows/x64/nuget.exe failed

App crashed during initializing networkUrl

I try to stream a camera view from a local camera. I get the following info:

video_player_win] native: path = <https://[email protected]:55756/Acs/Streaming/Video/Live/Mp4/%3Fcamera=18081_f01a4296-7683-4247-9c27-4e540d0dac7d&quality=medium&audio=0>
[native] ~MyPlayer()
[log] [video_player_win] controller intialize (open video) failed
[log] video file load failed
Lost connection to device.
Exited (sigterm)

new way to use custom http headers

`HRESULT OpenURL(const std::wstring& url) override {
HRESULT hr = S_OK;
wil::com_ptr resolver;
wil::com_ptr source;
wil::com_ptr mediaSource;
wil::com_ptr presentationDescriptor;

// Create the source resolver.
hr = MFCreateSourceResolver(&resolver);
if (!SUCCEEDED(hr)) {
std::cout << "MFCreateSourceResolver failed: " << hr << std::endl;
return hr;
}

// Set custom headers on the resolver.
if (!headers.empty()) {
wil::com_ptr credentialManager;
hr = MFCreateCredentialManager(&credentialManager);
if (SUCCEEDED(hr)) {
wil::com_ptr resolverAttributes;
hr = MFCreateAttributes(&resolverAttributes, 1);
if (SUCCEEDED(hr)) {
hr = resolverAttributes->SetUnknown(MFNETSOURCE_CREDENTIAL_MANAGER, credentialManager.get());
if (SUCCEEDED(hr)) {
for (const auto& header : headers) {
hr = resolverAttributes->SetString(MFNETSOURCE_HTTP_REQUEST_HEADERS, (LPCWSTR)header.first.c_str(), (LPCWSTR)header.second.c_str());
if (!SUCCEEDED(hr)) {
std::cout << "Failed to set header: " << header.first << std::endl;
}
}
}
}
}
if (!SUCCEEDED(hr)) {
std::cout << "Failed to set credentials manager" << std::endl;
return hr;
}
}

// Use the resolver to create a media source.
hr = resolver->CreateObjectFromURL(url.c_str(), MF_RESOLUTION_MEDIASOURCE, nullptr, &source);
if (!SUCCEEDED(hr)) {
std::cout << "CreateObjectFromURL failed: " << hr << std::endl;
return hr;
}

hr = source->QueryInterface(IID_PPV_ARGS(&mediaSource));
if (!SUCCEEDED(hr)) {
std::cout << "QueryInterface for IMFMediaSource failed: " << hr << std::endl;
return hr;
}

// Create a presentation descriptor for the media source.
hr = mediaSource->CreatePresentationDescriptor(&presentationDescriptor);
if (!SUCCEEDED(hr)) {
std::cout << "CreatePresentationDescriptor failed: " << hr << std::endl;
return hr;
}

// ... existing code ...
}
`

`IMFMediaSource* pSource = NULL;
IMFSourceResolver* pSourceResolver = NULL;
HRESULT hr = MFCreateSourceResolver(&pSourceResolver);
if (FAILED(hr))
{
// Handle error
}

// Create a property store to hold the HTTP headers
IPropertyStore* pPropertyStore = NULL;
hr = MFCreatePropertyStore(&pPropertyStore);
if (FAILED(hr))
{
// Handle error
}

// Set the custom HTTP headers
PROPVARIANT var;
PropVariantInit(&var);
var.vt = VT_BSTR;
var.bstrVal = SysAllocString(L"Authorization: Bearer TOKEN");
hr = pPropertyStore->SetValue(MF_HTTP_REQUEST_HEADERS, var);
if (FAILED(hr))
{
// Handle error
}

// Create a property store to hold the URL
PROPVARIANT varURL;
PropVariantInit(&varURL);
varURL.vt = VT_BSTR;
varURL.bstrVal = SysAllocString(L"http://example.com/video.mp4");

// Create the media source
MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;
hr = pSourceResolver->CreateObjectFromURL(varURL.bstrVal, MF_RESOLUTION_MEDIASOURCE, pPropertyStore, &ObjectType, (IUnknown**)&pSource);
if (FAILED(hr))
{
// Handle error
}

// Cleanup
PropVariantClear(&var);
PropVariantClear(&varURL);
SafeRelease(&pSourceResolver);
SafeRelease(&pPropertyStore);`

`#include "windows_media_player.h"

#include
#include
#include

#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.Media.Core.h>
#include <winrt/Windows.Media.Playback.h>
#include <winrt/Windows.Storage.h>
#include <winrt/Windows.Web.Http.Headers.h>

namespace {

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;

}

WindowsMediaPlayer::WindowsMediaPlayer() = default;

WindowsMediaPlayer::~WindowsMediaPlayer() = default;

void WindowsMediaPlayer::CreateMediaSource(
const std::string& uri, const std::map<std::string, std::string>& headers, winrt::Windows::Media::Core::MediaSource& media_source) const {
auto w_uri = converter.from_bytes(uri);
auto uri_obj = winrt::Windows::Foundation::Uri(w_uri);

winrt::Windows::Web::Http::Headers::HttpRequestHeaderCollection header_collection;
for (const auto& [key, value] : headers) {
auto w_key = converter.from_bytes(key);
auto w_value = converter.from_bytes(value);
header_collection.TryAppendWithoutValidation(w_key, w_value);
}

winrt::Windows::Web::Http::HttpClient client;
client.DefaultRequestHeaders().InsertRange(header_collection);

auto response = client.GetAsync(uri_obj).get();
response.EnsureSuccessStatusCode();

auto stream = response.Content().ReadAsInputStreamAsync().get();

auto content_type = response.Content().Headers().ContentType().MediaType();

auto content_type_w = converter.from_bytes(content_type);
auto media_stream_type = winrt::Windows::Media::Core::MediaStreamType::FromMediaType(content_type_w);

auto media_stream_source = winrt::Windows::Media::Core::MediaStreamSource::CreateFromInputStream(stream);
media_stream_source.AddMediaStream(media_stream_type, stream);
media_source = winrt::Windows::Media::Core::MediaSource(media_stream_source);
}

void WindowsMediaPlayer::Play(const std::string& uri, const std::map<std::string, std::string>& headers) const {
winrt::Windows::Media::Core::MediaSource media_source;
CreateMediaSource(uri, headers, media_source);

winrt::Windows::Media::Playback::MediaPlayer player;
player.Source(media_source);
player.Play();
}
`

setPlaybackSpeed Issue

_controller.setPlaybackSpeed(items[index]).then((_) { print("Playback speed set to ${items[index]}"); });

                          it's not working, items are     List<double> items = [0.5, 1.0, 1.5, 2.0, 2.5, 3.0];

Can't play certain .mp4 files

The video looks distorted when using this plugin.
WMP can play it without problems so I don't know what is wrong.

video.mp4

[crash] load http hls url is crash

log:

[video_player_win] native: path = <>
lost connection device.

version:

video_player: ^2.7.0
video_player_win: ^2.3.4

using code:

VideoPlayerController.networkUrl('https.xx.xx.m3u8');

format:

HLS H.265

Video not supported .m3u8 in Windows App

We are trying to integrate a video play feature in our windows app. Other videos are playing but the issue Is .m3u8 video is not working. We also tested with k-lite codec pack

Memory Leak

When disposing the controller it does not fully release all the memory.

Laggy video

on Lenovo ideapad 3 ( windows 10 ) video is laggy so much, like you put speed to 0.3 or 0.2.

Video player crashed on release mode

The 'video_player_win' channel sent a message from native to Flutter on a non-platform thread. Platform channel messages must be sent on the platform thread. Failure to do so may result in data loss or crashes, and must be fixed in the plugin or application code creating that channel.

Video Scrubbing Issue

Plugin version: ^2.3.4

Issue:

When scrubbing through a video, it appears that the preview is stacking frames from the seek requests instead of displaying the correct frame corresponding to the scrubbed position. Is there a way to fix this issue with the Media Foundation API or this management has to be done on frontend?

Current behavior

video_player_win_example.2024-02-21.12-03-57.-.Trim.mp4

Code sample

// main.dart
import 'dart:developer';
import 'dart:io';

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  VideoPlayerController? controller;
  double value = 0;

  void reload() {
    controller?.dispose();
    controller = VideoPlayerController.file(File("C:\\video.mp4"));
    //controller = WinVideoPlayerController.file(File("E:\\test_youtube.mp4"));
    //controller = VideoPlayerController.networkUrl(Uri.parse("https://media.w3.org/2010/05/sintel/trailer.mp4"));
    //controller = WinVideoPlayerController.file(File("E:\\Downloads\\0.FDM\\sample-file-1.flac"));

    controller!.initialize().then((value) {
      if (controller!.value.isInitialized) {
        controller!.play();
        setState(() {});

        controller!.addListener(() {
          if (controller!.value.isCompleted) {
            log("ui: player completed, pos=${controller!.value.position}");
          }
        });
      } else {
        log("video file load failed");
      }
    }).catchError((e) {
      log("controller.initialize() error occurs: $e");
    });
    setState(() {});
  }

  @override
  void initState() {
    super.initState();
    reload();
  }

  @override
  void dispose() {
    super.dispose();
    controller?.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('video_player_win example app'),
        ),
        body: Stack(children: [
          VideoPlayer(controller!),
          Positioned(
              bottom: 0,
              child: Column(children: [
                ValueListenableBuilder<VideoPlayerValue>(
                  valueListenable: controller!,
                  builder: ((context, value, child) {
                    int minute = value.position.inMinutes;
                    int second = value.position.inSeconds % 60;
                    String timeStr = "$minute:$second";
                    if (value.isCompleted) timeStr = "$timeStr (completed)";
                    return Text(timeStr,
                        style: Theme.of(context).textTheme.headline6!.copyWith(
                            color: Colors.white,
                            backgroundColor: Colors.black54));
                  }),
                ),
                ElevatedButton(
                    onPressed: () => restart(), child: const Text("Reload")),
                ElevatedButton(
                    onPressed: () => controller?.play(),
                    child: const Text("Play")),
                ElevatedButton(
                    onPressed: () => controller?.pause(),
                    child: const Text("Pause")),
                ElevatedButton(
                    onPressed: () => controller?.seekTo(Duration(
                        milliseconds:
                        controller!.value.position.inMilliseconds +
                            1 * 1000)),
                    child: const Text("Forward")),
                ElevatedButton(
                    onPressed: () {
                      int ms = controller!.value.duration.inMilliseconds;
                      var tt = Duration(milliseconds: ms - 1000);
                      controller?.seekTo(tt);
                    },
                    child: const Text("End")),
                Slider(
                  value: value,
                  onChanged: (double value) {
                    setState(() {
                      this.value = value;
                      controller!.seekTo(
                        Duration(
                            milliseconds:
                            (value * Duration.millisecondsPerSecond)
                                .toInt()),
                      );
                    });
                  },
                  min: 0,
                  max: controller!.value.duration.inSeconds.toDouble(),
                )
              ])),
        ]),
      ),
    );
  }

  restart() {
    controller!.seekTo(Duration.zero);
  }
}

Flutter doctor

[√] Flutter (Channel stable, 3.16.0, on Microsoft Windows [Version 10.0.22631.3155], locale en-US)
    • Flutter version 3.16.0 on channel stable at C:\Users\Teste\fvm\versions\3.16.0
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision db7ef5bf9f (3 months ago), 2023-11-15 11:25:44 -0800
    • Engine revision 74d16627b9
    • Dart version 3.2.0
    • DevTools version 2.28.2

[√] Windows Version (Installed version of Windows is version 10 or higher)

[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at C:\Users\Teste\AppData\Local\Android\sdk
    • Platform android-34, build-tools 34.0.0
    • Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-b2043.56-10550314)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.0)
    • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.22631.3155]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 121.0.6167.187
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 121.0.2277.128

[√] Network resources
    • All expected network resources are available.

• No issues found!

Not able to play .m3u8 videos through network

I tried to play .m3u8 files directly from the network. It doesn't seem to work. It throws video error.

I tried installing all the k-lite codecs still there is the same issue. But the .m3u8 files are working fine on mobile devices with the native video_player plugin.

onErrorBuilder request

While playing the network video, my app caches the video in temp dir so that the next time the user enters, it plays from the cache. When the user interrupts the download of the mp4 while it is not fully completed, it appears to crash without any error message. Is it possible to check for errors before playing so that I can play from the network instead or maybe just show error image?

[Support request] Can I make position property updated more frequently?

I want my video player to be able to automatically pause at the end of a subtitle. So in my code I check the player's current position at regular intervals to see whether it has reached the point it should pause at.

But it seems that in video_player_win, VideoPlayerController's position property is only updated about once a second. This doesn't make the pause accurate enough.

What can I do to solve this problem? Is there something I can change to make position updated at a higher frequency? Or am I approaching this entirely the wrong way? I also tried addListener(), but the callback function seemed to be invoked every one second as well. Some help is much appreciated.

I tested the same code with video_player on Android. I was able to obtain about the right values of position at intervals of 100 milliseconds.

Thank you very much!

application cant run

i created a clean project and just install the player. nothing else. and when i run it it give me those problem:
Launching lib\main.dart on Windows in debug mode...
lib\main.dart:1
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: The command "setlocal [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: ....\nuget.exe install Microsoft.Windows.ImplementationLibrary -Version 1.0.220914.1 -ExcludeVersion -OutputDirectory C:/developement/myProject/testfr/build/windows/packages [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: :cmEnd [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: :cmErrorLevel [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: exit /b %1 [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: :cmDone [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(149,5): error MSB3073: :VCEnd" exited with code 1. [C:\developement\myProject\testfr\build\windows\plugins\video_player_win\video_player_win_DEPENDENCIES_DOWNLOAD.vcxproj]
Exception: Build process failed.
Exited (sigterm)

but everthing is ok whith flutter doctor:
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.3.10, on Microsoft Windows [Version 10.0.19044.2364], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.4.4)
[√] Android Studio (version 2021.3)
[√] VS Code (version 1.74.3)
[√] Connected device (3 available)
[√] HTTP Host Availability

• No issues found!

please help

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.