pooler fails auth after major version Upgrade from pg16 to pg17

Is there an existing issue already for this bug?

[x] I have searched for an existing issue, and could not find anything. I believe this is a new bug.

I have read the troubleshooting guide

[x] I have read the troubleshooting guide and I think this is a new bug.

I am running a supported version of CloudNativePG

[x] I have read the troubleshooting guide and I think this is a new bug.

Contact Details
No response
Version
1.24.0
What version of Kubernetes are you using?
1.29
What is your Kubernetes environment?
Cloud: Amazon EKS
How did you install the operator?
YAML manifest
What happened?
After performing an upgrade from postgres 16 to postgres 17, pgbouncer auth no longer works.
Any time a connection is attempted through pgbouncer I get these error:
platform-pgbouncer-5477c79474-5vpg7 pgbouncer {"level":"info","ts":"2024-12-03T20:54:33.463442798Z","msg":"record","logger":"pgbouncer-manager","pipe":"stderr","record":{"timestamp":"2024-12-03 20:54:33.463 UTC","pid":"12","level":"LOG","msg":"S-0x55fa419e7b50: mydb/cnpg_pooler_pgbouncer@<IP_ADDRESS>:5432 new connection to server (from <IP_ADDRESS>:50356)"}}
platform-pgbouncer-5477c79474-5vpg7 pgbouncer {"level":"info","ts":"2024-12-03T20:54:33.467846655Z","msg":"record","logger":"pgbouncer-manager","pipe":"stderr","record":{"timestamp":"2024-12-03 20:54:33.467 UTC","pid":"12","level":"LOG","msg":"S-0x55fa419e7b50: mydb/cnpg_pooler_pgbouncer@<IP_ADDRESS>:5432 SSL established: TLSv1.3/TLS_AES_256_GCM_SHA384/ECDH=prime256v1"}}
platform-pgbouncer-5477c79474-5vpg7 pgbouncer {"level":"info","ts":"2024-12-03T20:54:33.474514074Z","msg":"record","logger":"pgbouncer-manager","pipe":"stderr","record":{"timestamp":"2024-12-03 20:54:33.474 UTC","pid":"12","level":"LOG","msg":"S-0x55fa419e7b50: mydb/cnpg_pooler_pgbouncer@<IP_ADDRESS>:5432 closing because: error response from auth_query (age=0s)"}}
platform-pgbouncer-5477c79474-5vpg7 pgbouncer {"level":"info","ts":"2024-12-03T20:54:33.474557783Z","msg":"record","logger":"pgbouncer-manager","pipe":"stderr","record":{"timestamp":"2024-12-03 20:54:33.474 UTC","pid":"12","level":"LOG","msg":"C-0x55fa419cda50: mydb/(nouser)@<IP_ADDRESS>:53784 closing because: bouncer config error (age=0s)"}}
platform-pgbouncer-5477c79474-5vpg7 pgbouncer {"level":"info","ts":"2024-12-03T20:54:33.474573431Z","msg":"record","logger":"pgbouncer-manager","pipe":"stderr","record":{"timestamp":"2024-12-03 20:54:33.474 UTC","pid":"12","level":"WARNING","msg":"C-0x55fa419cda50: mydb/(nouser)@<IP_ADDRESS>:53784 pooler error: bouncer config error"}}
platform-pgbouncer-5477c79474-5vpg7 pgbouncer {"level":"info","ts":"2024-12-03T21:54:33.948862615Z","msg":"record","logger":"pgbouncer-manager","pipe":"stderr","record":{"timestamp":"2024-12-03 21:54:33.948 UTC","pid":"12","level":"WARNING","msg":"dropping database 'mydb' as it does not exist anymore or inactive auto-database"}}

I seem to have narrowed it down to a permissions failure, but I haven't been able to fully understand what is missing. seems to only be in the context of the "mydb" db. It works if I \c postgres to the main postgres db. When I start up a brand new database with the same config, it works fine. Doing this on the previous database works fine.
mydb=> SELECT usename, passwd FROM public.user_search('mydb');
ERROR:  permission denied for view pg_shadow
CONTEXT:  SQL function "user_search" statement 1

I tested this by execing into the pgbouncer pod and connected to postgres like so
psql "user=cnpg_pooler_pgbouncer dbname=mydb host=platform-db-rw sslcert=/controller/configs/authUser/tls.crt sslkey=/controller/configs/authUser/tls.key sslrootcert=/controller/configs/server-tls/ca.crt sslmode=prefer"

Again, everything works fine on the cluster that I'm bootstrapping from in the same namespace. I point pgbouncer at the old cluster and it goes back to normal. I have also tried deleting the pooler resource before standing up the pg17 instance, but it fails in the same way when I add the pooler resource back in pointing at the new instance.
Cluster resource
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "-2"
  labels:
    app: mydb
    app.kubernetes.io/instance: ephemeral_ephemeral-dylan
    component: postgres
  name: platform-db-17
  namespace: ephemeral-dylan
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: karpenter.k8s.aws/instance-category
            operator: In
            values:
            - r
    podAntiAffinityType: preferred
  bootstrap:
    initdb:
      database: mydb
      encoding: UTF8
      import:
        databases:
        - mydb
        source:
          externalCluster: platform-db
        type: microservice
      localeCType: C
      localeCollate: C
      owner: mydb
  enablePDB: true
  enableSuperuserAccess: true
  externalClusters:
  - connectionParameters:
      dbname: postgres
      host: platform-db-rw
      user: postgres
    name: platform-db
    password:
      key: password
      name: platform-db-superuser
  failoverDelay: 0
  imageName: ghcr.io/cloudnative-pg/postgresql:17.0-24
  instances: 1
  logLevel: info
  maxSyncReplicas: 0
  minSyncReplicas: 0
  monitoring:
    customQueriesConfigMap:
    - key: queries
      name: cnpg-default-monitoring
    disableDefaultQueries: false
    enablePodMonitor: false
  postgresGID: 26
  postgresUID: 26
  postgresql:
    parameters:
      archive_mode: "on"
      archive_timeout: 5min
      dynamic_shared_memory_type: posix
      full_page_writes: "on"
      log_destination: csvlog
      log_directory: /controller/log
      log_filename: postgres
      log_rotation_age: "0"
      log_rotation_size: "0"
      log_truncate_on_rotation: "false"
      logging_collector: "on"
      max_parallel_workers: "32"
      max_replication_slots: "32"
      max_worker_processes: "32"
      pg_stat_statements.track: all
      pgaudit.log: ""
      pgaudit.log_parameter: "off"
      pgaudit.log_relation: "off"
      shared_memory_type: mmap
      shared_preload_libraries: ""
      ssl_max_protocol_version: TLSv1.3
      ssl_min_protocol_version: TLSv1.3
      wal_keep_size: 512MB
      wal_level: logical
      wal_log_hints: "on"
      wal_receiver_timeout: 5s
      wal_sender_timeout: 5s
    syncReplicaElectionConstraint:
      enabled: false
  primaryUpdateMethod: restart
  primaryUpdateStrategy: unsupervised
  replicationSlots:
    highAvailability:
      enabled: true
      slotPrefix: _cnpg_
    synchronizeReplicas:
      enabled: true
    updateInterval: 30
  resources:
    requests:
      cpu: "2"
      memory: 4Gi
  smartShutdownTimeout: 180
  startDelay: 3600
  stopDelay: 1800
  storage:
    resizeInUseVolumes: true
    size: 10Gi
    storageClass: ebs-ephemeral
  switchoverDelay: 3600

Relevant log output

Code of Conduct

[x] I agree to follow this project's Code of Conduct

same here

@kamikaze - have you found any workaround methods that work? I'd love to eventually get this working even if it's a workaround, unfortunately I haven't found one. Even manually updating the permissions I cannot figure out how to fix it.

nope :(


Add a way for edit files including HTML with GUI editor.

Improvement!

VSCode Version: 1.19.1
OS Version: Windows 10 and Linux Ubuntu 16.04 both
Add a way for open files in browser or another window and edit text, edit animations, add pictures, etc...

Reproduces without extensions: Yes

Most of this is possible with extensions, if you have a specific API request please create a new issue.


Update base-page.js

User's password is validated in real time when the users start typing in his/her password.

Thanks for the contribution, @dromero23 . This looks to be a work in progress. Is your plan to validate the length of the input as the user types?

Yes that is the idea, however I am not really familiar with html, so you
may not be able to see the update on the website since I was not able to
find the right .mako file
On Sat, Feb 28, 2015 at 5:45 PM, Steven Loria<EMAIL_ADDRESS>wrote:

Thanks for the contribution, @dromero23 https://github.com/dromero23 .
This looks to be a work in progress. Is your plan to validate the length of
the input as the user types?
—
Reply to this email directly or view it on GitHub
https://github.com/CenterForOpenScience/osf.io/pull/1991#issuecomment-76557454
.

--
Daniel Romero
IT- IEEE UH Branch
B.S. Computer Engineering 2015
Cullen College of Engineering
University of Houston

The mako file for the login page is here: https://github.com/CenterForOpenScience/osf.io/blob/ee6c055b57487e388b921d4d158dff87cc5f6ea5/website/templates/public/login.mako
We also have a registration form in website/templates/index.mako.

Closing this for now until this feature gets picked up again.


Unable to Create Commands from Inside a Class.

I've been using Click for a while with some smaller, non-dynamic CLI application and found it pretty fun to use. After I finished a rough sketch of the idea, I wanted to further this by making it pluggable, via classes.
Is Click not able to have commands registered inside a Class?
There's alot more to it than this, though, currently I wrote up a test to show how this feature doesn't work, and I'm curious if there's a way to do it. If so, please inform me.
Here's my test code.
import click

CONTEXT_SETTINGS = dict(
    auto_envvar_prefix='COMPLEX'
)

class AppContext(object):
    def __init__(self):
        self.name = "Brandon"
        self.greeting = "Hello, "
        self.after_greet = "FROM THE OTHER SIIIIIIIIIIDE"

class Commands(object):
    def __init__(self):
        self.commands = ["perform_hello", "perform_otherside"]

    @click.command("hello")
    def perform_hello(self, ctx):
        print("%s%s" % (ctx.greeting, ctx.name))

    @click.command("otherside")
    def perform_otherside(self, ctx):
        print("%s" % ctx.after_greet)

commands = Commands()

class ClickCLITest(click.MultiCommand):
    def __init__(self, **kwargs):
        super(ClickCLITest, self).__init__(**kwargs)

    def get_command(self, ctx, cmd_name):
        name = "perform_%s" % cmd_name
        if name not in commands.commands:
            return
        return getattr(commands, name)

    def list_commands(self, ctx):
        cmds = []

        for cmd in commands.commands:
            if cmd.startswith("perform_"):
                cmds.append(cmd.replace("perform_", ""))

        cmds.sort()
        return cmds

pass_context = click.make_pass_decorator(AppContext, True)

@click.command(cls=ClickCLITest, context_settings=CONTEXT_SETTINGS)
@pass_context
def run_app(ctx):
    print("Beginning App Execution")

if __name__ == "__main__":
    run_app()

The way my app is designed, is much like the test code above. Only difference is I don't use get_attr or anything of that nature, I actually subclass a Plugin class, then tag a method as the command.
I'd really like to be able to make click commands inside classes, as opposed to top level functions. Is this possible? At all?

No, that's not how Click is supposed to be used at all, and TBH I don't really see the point of it. You're using classes as if they were modules.


feat(args): convert embedded and braced variables in command args

Hello again. :)
Now for the actual contribution I mentioned in #85. It turns out it supersedes #85, but I submitted #85 anyway because I thought it could still be useful for you to make a patch release, and you did, so that's great! This contribution however, is a breaking change.
If you feed cross-env on Windows with something like echo $npm_package_name $npm_package_version, it correctly runs echo %npm_package_name% %npm_package_version%. But if instead you feed it with echo $npm_package_name/$npm_package_version (notice the slash in the middle), then it runs echo %npm_package_name%. That is because the command argument is replaced by the converted first match of a variable pattern. The goal of this PR is to make cross-env support variables embedded inside arguments, so that it would instead run echo %npm_package_name%/%npm_package_version% (breaking change).
Supporting embedded variables means cross-env also needs to support braced variables on Unix (${myvar}), so this PR introduces that as well.
Let me know if you find this feature useful.

Codecov Report

Merging #86 into master will not change coverage.
The diff coverage is 100%.

@@          Coverage Diff          @@
##           master    #86   +/-   ##
=====================================
  Coverage     100%   100%
=====================================
  Files           2      2
  Lines          34     31    -3
=====================================
- Hits           34     31    -3

Impacted Files
Coverage Δ

src/command.js
100% <100%> (ø)
:white_check_mark:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c1a9ed0...a53f3e6. Read the comment docs.

I changed the base of this PR from master to next so we can queue up a few breaking changes. So this wont be released after it's merged (as it normally would). It will be released when next is merged into master. Also, we can release a beta and make sure it works. That'd probably be a good idea :)

Actually, if you wanna do this in another PR to next, and maybe even this really simple change in another PR to next that'd be awesome. I can't think of any other things I intend to break, so once those are all in next, we can merge that to master and get this all released 👍

Thanks for the review. I will have a look at those other PR/issues either later tonight or tomorrow, and see what I can do.

Thanks so much for your help! I've added you as a collaborator on the project. Please make sure that you review the CONTRIBUTING.md file (specifically the bit about the commit messages and the git hooks) and familiarize yourself with the code of conduct (we're using the contributor covenant). You might also want to watch the repo to be notified when someone files an issue/PR. Please continue to make PRs as you feel the need (you can make your branches directly on the repo rather than your fork if you want). Thanks! And welcome to the team :)


Polyfills for File and Blob

React Native should polyfill the File and Blob APIs so it can work with Parse and Firebase storage. This is a third party solution that solves the problem: https://github.com/wkh237/react-native-fetch-blob/tree/b98143d5d888f49abad43d50990c980ac3a7b4f7/src/polyfill -- but a polyfill like this I believe belongs in core.

Can you put this on Product Pains, rather than as an issue? I don't think the "community responsibility" tag has proven to be effective.


Add CMake option to explicitly skip wasm-opt and use wasm-tools strip instead.

As per #8, it seems the main purpose of using wasm-opt was to reduce module size by stripping debug sections. The comment in the CMake file also indicates an intent to optimize the binary.
However, wasm-opt -O3 is extremely expensive on large programs; on my 18-core, 36-thread workstation, it took several minutes to complete. This is very painful when part of a debug loop that requires release builds (e.g. for performance features).
This PR adds a USE_WASM_OPT CMake option, on by default to preserve existing behavior, that allows one to do cmake -DCMAKE_BUILD_TYPE=Release -DUSE_WASM_OPT=OFF to get a release build without wasm-opt. In its place, this PR uses wasm-tools strip -a, which strips debug sections (and all other custom sections) without rewriting code.

Oh, and another note: several minutes seems excessively long. On my M2 MBP, running wasm-opt on starling.wasm takes maybe 20-30 seconds. Still long enough to justify this PR, but the difference makes me wonder if something's up with your wasm-opt?

Oh, and another note: several minutes seems excessively long. On my M2 MBP, running wasm-opt on starling.wasm takes maybe 20-30 seconds. Still long enough to justify this PR, but the difference makes me wonder if something's up with your wasm-opt?

Weirdly it took 3m55s for me (and Binaryen 117, one release behind current, downloaded by CMake):
cfallin@cfallin-tower:~/work/starlingmonkey/build% time ../deps/cpm_cache/binaryen/9dd4ea32e81e22d3849b452b706a16035cc86563/binaryen/bin/wasm-opt -O3 --strip-debug --enable-bulk-memory starling.wasm -o o.wasm
 -O3 --strip-debug --enable-bulk-memory starling.wasm -o o.wasm  688.73s user 6905.28s system 3220% cpu 3:55.77 total
cfallin@cfallin-tower:~/work/starlingmonkey/build% ../deps/cpm_cache/binaryen/9dd4ea32e81e22d3849b452b706a16035cc86563/binaryen/bin/wasm-opt --version
wasm-opt version 117 (version_117)

That system time stands out, and combined with (i) user-time of ~11 minutes (so average CPU occupancy of ~3 cores) and (ii) observation in top that this was pegging 36 cores tells me that Binaryen probably has some weird locking/scaling bottleneck (futex syscalls under mutexes?). My fault for having a large Xeon workstation I guess?


Move CS2 after GD1 and WD1.

Coverage increased (+0.2%) to 56.696% when pulling c23a45a59353653f48096a8b9a6cdd289fb9fca4 on Zerrien:course-order into dbc37fce7f8d8d14e6f2c447d627e06d922bd528 on codecombat:master.


 The main issue seems to be with mask erosion being slow. I managed to speed it up a bit but it still isn't great. I also added the functionality from https://github.com/nerfstudio-project/nerfstudio/pull/2585 to PairPixelSampler.
Before any of the changes:

With only erosion:

With both erosion and rejection sampling:

This is an initial step towards #3446

Not sure about the test failure:
ERROR: failed to authorize: failed to fetch oauth token: unexpected status from GET request to [https://auth.docker.io/token?](https://auth.docker.io/token?scope=repository%3Adocker%2Fdockerfile%3Apull&service=registry.docker.io:)

Is there a reason we aren't also using the rejection sampling for the PatchPixelSampler? Maybe not in this PR, but now the rejection sampling is its own separate fn it seems like it would be a drop-in replacement.

There is no reason, and it is a drop-in replacement. However, I agree that a separate PR seems better here. I opened one here (rebased this branch and started the new PR from it).


feat(cli): Support build time dependencies for dependencies uploaded …

…to the Image Registry

Some Camel Quarkus Extensions require resources to be present at build time. This adds the possibility to do so when uploading dependencies to the Image Registry by specifying classpath=true e.g:
kamel run route.java -d file://resource.dat?classpath=true

Thanks !

Release Note
NONE

Thanks for the review! If it's ok I'll merge this as the test failures seem unrelated ...

@johnpoth For some reason, this commit starts to break the local test. Can you have a look?
https://github.com/apache/camel-k/actions/runs/3480470831

No worries, it passed finally!  Please ignore it.


Update New-CsGroupPolicyAssignment.md

OnlineVoiceRoutingPolicy is not currently supported via group policy, even though it appears to be. The service that consumes it is not group policy-aware.
Until that service is modified to support group policy assignment, the only workaround is to assign policies individually.
Whenever Teams service supports such assignment type, the article could be updated to include such PolicyType.

Docs Build status updates of commit 447e9fc:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

teams/teams-ps/teams/New-CsGroupPolicyAssignment.md
:white_check_mark:Succeeded
View (teams-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 447e9fc:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

teams/teams-ps/teams/New-CsGroupPolicyAssignment.md
:white_check_mark:Succeeded
View (teams-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

@Kateyanne Please merge this PR. Thanks.

@Kateyanne Please merge this PR. Thanks.

Docs Build status updates of commit 0e4ec61:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

teams/teams-ps/teams/New-CsGroupPolicyAssignment.md
:white_check_mark:Succeeded
View (teams-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

Docs Build status updates of commit 0e4ec61:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

teams/teams-ps/teams/New-CsGroupPolicyAssignment.md
:white_check_mark:Succeeded
View (teams-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel


Support drawing text onto a DrawScope

Problem to Solve
DrawScope provides methods to draw polygons (drawOval, drawRoundRect, etc.) but it doesn't provide one to draw text, a common requirement - e.g: when drawing a flowchart, we draw shaped 'nodes' which have text labels.
We've found two possible workarounds:

Create a container (such as androidx.compose.foundation.layout.Box) containing both a Canvas and other composables. Draw polygons in the Canvas, and place androidx.compose.material.Text composables at the same offset in the container. However, this is inelegant, as shapes and their label texts are now in different logical parts of the application, and we've found it can cause "jitter" as the shape redraws faster than the text.

drawIntoCanvas { canvas ->
    canvas.nativeCanvas.drawTextLine(TextLine.make(text, font), x, y, paint.toFrameworkPaint())
}

where font is org.jetbrains.skia.Font, paint is androidx.compose.ui.graphics.Paint. This lets us efficiently draw text on the Canvas, but requires pulling in a new dependency (skiko-awt) and creating a new kind of Font (as well as Skia's Typeface, Data and TextLine), that represents the same font as our androidx.compose.ui.text.platform.Font, and is loaded from the same resource, but comes from a different library.
Proposed Solution
Implement drawTextLine in androidx.compose.ui.graphics.drawscope.DrawScope
Additional Information
Compose Version: 1.1.0-alpha04
Environment: Desktop

I've just noticed https://github.com/JetBrains/compose-jb/issues/2077 and https://issuetracker.google.com/issues/190787898. Seems like this has been an open issue in Jetpack Compose since mid-2021.
In that case, feel free to close this issue (hopefully the workarounds I've described can help others down the line 🙂  )

@alexjpwalker Do you have problems positioning Text drawn in your second workaround?
I have a problem positioning text vertically relative to other elements. For example, I need to draw something like " - Text" (Line and Text centered vertically to each other), I have a Y coordinate of Line element and to center Text I need to know the exact height of the Text. Moreover, I need to know the Text height without vertical font padding to make it look fine.

@alexjpwalker Do you have problems positioning Text drawn in your second workaround? I have a problem positioning text vertically relative to other elements. For example, I need to draw something like " - Text" (Line and Text centered vertically to each other), I have a Y coordinate of Line element and to center Text I need to know the exact height of the Text. Moreover, I need to know the Text height without vertical font padding to make it look fine.

We have a similar requirement, actually! In our case we want the Text to be centred at a specific point on the Canvas (as opposed to the default behaviour of drawTextLine, which draws the top-left corner of the text at the Offset passed in to it.)
To draw it centred at a specific point, we have the following code.
fun drawSingleLine(drawScope: DrawScope, text: String, center: Offset, font: Font) {
    val textLine = TextLine.make(text, font)
    drawScope.drawIntoCanvas {
        it.nativeCanvas.drawTextLine(
            textLine,
            center.x - textLine.width / 2,
            center.y + textLine.capHeight / 2,
            Paint().apply { this.color = color }.asFrameworkPaint()
        )
    }
}

You can adapt it to your needs.
My understanding is that TextLine.capHeight represents the height of the glyphs (rendered characters), while TextLine.height is the "line height", so when rendering multiple TextLines, the nth TextLine should be offset by TextLine.height * (n-1) relative to the offset of line 1.

This is an extremely annoying issue and I hope that it will get fixed soon. I wonder how you are supposed to do serious graphics without beeing able to handle text at the same level. Having to use workarounds like the ones mentioned is just a PITA.

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


BrowserHistory for redirects out of domain

Hey, had issues using react-router-redux where the client-side does not redirect to an external url on push. It works well on server-side rendering though. Wonder if this is a concern in this repo or in react-router-redux or this should be something that I should handle in my app.
Thanks!

We don't support redirecting out of domain period. In general you should handle redirects to external URLs separately.


Expand "poe2arb" with "arb2poe"

Case study:
We need a tool allowing us to seed brand new POEditor project with terms and translations we have in local .arb files. It could look like:
> poe2arb export * //Let's point current directory as a directory containing the .arb files
Found app_pl.arb, app_en.arb, app_fr.arb
Enter POEditor project id: 123456

Creating pl language... Done.
Creating en language... Done.
Creating fr language... Done.

Uploading pl terms and translations... Done.
Uploading en terms and translations... Done.
Uploading fr terms and translations... Done.

Project seeded successfuly.

The bash script version
I've written a simple bash script to do the essential work but it doesn't handle typed parameters properly. It reads POEditor project id from prompt and assumes .arb files are in lib/resources/l10n subdirectory.
#!/bin/bash

# TODO: Remember to delete this script after running it.

# Check if the script is in a Flutter project directory by looking for the pubspec.yaml file
if [ ! -f "pubspec.yaml" ];
then
    echo "Error: This script must be run in the main directory of a Flutter project."
    exit 1
fi

# Set the path to the directory containing your ARB files
ARB_DIR="lib/resources/l10n"

# Check if POEDITOR_TOKEN environment variable is set, and if not, prompt the user for it
if [ -z "$POEDITOR_TOKEN" ];
then
    echo "POEDITOR_TOKEN environment variable is not set."
    echo "Please enter your POEditor API Token:"
    read -r PROMPT_POEDITOR_TOKEN

    ACCESS_TOKEN="$PROMPT_POEDITOR_TOKEN"
else
    ACCESS_TOKEN="$POEDITOR_TOKEN"
fi

# Prompt the user for the project ID
echo "Please enter your POEditor project ID:"
read PROJECT_ID

# Get a list of all ARB files in the directory
arb_files=("$ARB_DIR"/app_*.arb)
last_index=$((${#arb_files[@]} - 1))  # Index of the last element in the array
between_uploads_delay_in_seconds=20

# Iterate through ARB files in the directory
for ((i=0; i<${#arb_files[@]}; i++));
do
    file="${arb_files[$i]}"
    if [ -f "$file" ];
    then
        # Extract language code from the file name (e.g., app_en.arb -> en)
        LANG_CODE=$(basename "$file" .arb | sed 's/^app_//')

        # Check if the language exists on POEditor
        lang_exists=$(curl -s -X POST \
            -F "api_token=$POEDITOR_TOKEN" \
            -F "id=$PROJECT_ID" \
            -F "language=$LANG_CODE" \
            https://api.poeditor.com/v2/languages/list | jq -r '.result.languages[] | select(.code == "'"$LANG_CODE"'")')

        # If the language doesn't exist, create it on POEditor
        if [ -z "$lang_exists" ];
        then
            echo "Creating $LANG_CODE language..."
            curl -s -X POST \
                -F "api_token=$POEDITOR_TOKEN" \
                -F "id=$PROJECT_ID" \
                -F "language=$LANG_CODE" \
                https://api.poeditor.com/v2/languages/add
            echo "Language \"$LANG_CODE\" created successfuly."
        fi

        # Upload the ARB file to POEditor for the specified language
        echo "Uploading $LANG_CODE terms and translations..."
        response=$(curl -s -X POST \
            -F "api_token=$ACCESS_TOKEN" \
            -F "id=$PROJECT_ID" \
            -F "updating=terms_translations" \
            -F "language=$LANG_CODE" \
            -F "file=@$file" \
            https://api.poeditor.com/v2/projects/upload)

        # Check for errors in the API response
        error=$(echo "$response" | jq -r '.response.code')
        if [ "$error" == "200" ];
        then
            echo "Uploaded $LANG_CODE arb file successfully."
        else
            echo "Error uploading $LANG_CODE arb file: $response"
        fi

        # Wait 20 seconds between uploads in order to fix "Too many
        # upload requests in a short period of time" error.
        if [ "$i" -ne "$last_index" ];
        then
            echo "Sleeping $between_uploads_delay_in_seconds seconds in order to prevent "Too many requests" error..."
            sleep $between_uploads_delay_in_seconds
        fi
    fi
done

This would be really cool. POEditor doesn't seem to allow automatically importing from a separate branch. Therefore, right now we always merge to develop before syncing with POEditor.


Usage Question: Returning data in source pixel grid with no resampling

Hi, thanks for the great library - it is really easy to work with.
I have a specific use case for analysing Sentinel 2 stacks, which are already rectified and referenced to a consistent grid across scenes. Is it possible to use odc stac to return the data where the coordinates for each pixel, across each band are the same as the source files?
Currently I am using bbox, but I am not sure if resampling is taking place.
Thanks

The most precise mechanism for controlling output pixel grid is to use GeoBox, supplied via geobox= parameter to odc.stac.load(.., geobox=..).
If your STAC metadata contains necessary elements^^ AND all STAC items share "common pixel grid"**, odc-stac will default to loading pixels with the native grid and not resampling. In the general case "native load" is of course not possible, say when region spans UTM zones and you have S2 granules in different projections.
^^ basically Projection Extension Information, see STAC best practices
** common pixel grid means: same CRS, same resolution, same "grid anchor". For Sentinel 2 "grid anchor" is "pixel edge aligns to x=0, y=0lines when extending grid all the way to the origin, which is also default anchor inodc.stac.load` when generating.
So you might be already loading data in non-resampled way, since supplying bbox= applies this "pixel snapping", I still don't have a document to point people to for explaining exact pixel grid behaviours 😮💨

You can construct GeoBox from bounding box using odc.geo.geobox.GeoBox.from_bbox, CRS and resolution is kinda obvious, anchor= is what you need to understand to create an appropriate GeoBox for your data, usually it's "edge aligns to X/Y axis" (Sentinel 2), other common one is "center aligns to X/Y axis" (Landsat, climate data often uses that too). And if you have other data already loaded you can just query the geobox of that data with xx.odc.geobox, and then use that directly or construct "compatible GeoBox" with GeoBox.enclosing method.


Update Djano and Python versions in docs

The Python and Django versions were out of sync in the docs.  (It almost put me off using it as I assumed it was just an old package).

Coverage remained the same at 97.521% when pulling 1ed36c1ee0103f080cbf61e0d55b5f3f7fadc22d on Singletoned:master into 1a6d4a13704c7a38b27f3ba7fd1f795b44911600 on bigjason:master.

Codecov Report

Merging #67 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #67   +/-   ##
=======================================
  Coverage   96.55%   96.55%
=======================================
  Files           1        1
  Lines         116      116
  Branches       17       17
=======================================
  Hits          112      112
  Misses          3        3
  Partials        1        1

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1a6d4a1...1ed36c1. Read the comment docs.

Thank you!


Update process-compose.yml in rails stack

Corrected it to reflect rails and not django
Summary
Changed django to rails
How was it tested?
No test needed, comment update

🤦


fix: resolve esm and cjs issue

Please describe the changes this PR makes and why it should be merged:
esm issue raised in #227 and later fixed in #229 but unfortunately the change applied to cjs (#231) as well, tsup banner solution does not provide any configuration that we can use atm. This PR is solution to resolve this problem with custom script.

there is one more reason, why we could not use banner. The import.meta.url resolved at build time. Which is not a ideal solution.
screenshot of present build output

ESM Test Result

note: cjs tests are not required.

@iCrawl

my bad sorry

no it's not

Oh, I see, it's the resolve at build time.

@iCrawl I am not sure, but please resolve this.

in node module, the package is updated and I can verify with package.json version. But with generateDependencyReport() is shows 0.7.3 and your changes are there as well.

but still issue is not resolved with ESM.

Lets try again in 0.7.5 🙃

Lets try again in 0.7.5 🙃

well that's the solution given in this PR, so no doubt it will work.
ref: https://github.com/discordjs/voice/commit/644af9579f02724c489514f482640b8413d2c305

Yeah I just didn't want to bring in another dependency for something so simple.

Yeah I just didn't want to bring in another dependency for something so simple.

yes, I just didn't think about fs in first place, my bad. Anyway, thanks.


Add the ability to show GE/alch values on top of items

Is your feature request related to a problem? Please describe.
I'd like to be able to tell how much the items in my inventory are worth at a glance. In particular, seed values are really annoying due to how similar the seeds look.
The "View guide prices" button and Runelite's right click examine feature come close, but I'd really like to see the item prices overlayed on top of the items at all times.
Describe the solution you'd like
Something like this would be fantastic:

Since it adds clutter, it would probably be best to have it toggled off by default.

item prices plugin already lets you hover over them to get this info

Right, that's a third way to see them. But it would be really nice to have the option to show them at all times. Inspecting every item individually is tedious, especially when you're doing something like pickpocketing Master Farmers.

The item identification plugin already will display seed/sapling names, so that should address the seed issue you mentioned. Generally, I don't see a use for displaying item values at all times.

The idea is to be able to discern the value of your inventory items at a quick glance.
If I'm using a cannon or something and my inventory's getting full, then I don't care about the item names; I just want to quickly drop a low value item.

Just wanted to add that it would also be super useful in your bank. I have over 700 items in the default tab, as do many people. Figuring out what's valuable and what's not would be significantly faster if every item stack had its value overlayed on top of it,

Item prices plugin is enough, just hover, or examine, or w/e. this is too much clutter, looks horrible and fits like only your use case


[video_player] final position is often never reported when setLooping is true

Steps to Reproduce

Create a sample app with a single video and add setLooping(true).
Let the video play till end and restart
Check the duration in microseconds when the video is restarted

Expected results: The video should restart after the video is completed.
Actual results: The video restarts before few microseconds (in some cases seconds) of completion
Reproducible Code: https://github.com/AbhishekDoshi26/video_player_example
Logs

flutter run -v
D:\Flutter` Projects\video_player_example>flutter run -v
[  +61 ms] executing: [C:\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[  +63 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] f4abaa0735eba4dfd8f33f73363911d63931fe03
[        ] executing: [C:\flutter/] git tag --points-at f4abaa0735eba4dfd8f33f73363911d63931fe03
[  +57 ms] Exit code 0 from: git tag --points-at f4abaa0735eba4dfd8f33f73363911d63931fe03
[        ] 2.2.3
[   +4 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[  +33 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/stable
[        ] executing: [C:\flutter/] git ls-remote --get-url origin
[  +30 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[ +119 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref HEAD
[  +40 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] stable
[ +101 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +3 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[   +1 ms] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[  +59 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe devices -l
[  +42 ms] List of devices attached
           emulator-5554          device product:sdk_gphone_x86 model:sdk_gphone_x86 device:generic_x86_arm transport_id:1
[   +8 ms] C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell getprop
[  +51 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[   +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[  +82 ms] Skipping pub get: version match.
[  +32 ms] Found plugin video_player at C:\flutter\.pub-cache\hosted\pub.dartlang.org\video_player-2.2.0\
[   +7 ms] Found plugin video_player_web at C:\flutter\.pub-cache\hosted\pub.dartlang.org\video_player_web-2.0.4\
[  +87 ms] Found plugin video_player at C:\flutter\.pub-cache\hosted\pub.dartlang.org\video_player-2.2.0\
[   +3 ms] Found plugin video_player_web at C:\flutter\.pub-cache\hosted\pub.dartlang.org\video_player_web-2.0.4\
[  +13 ms] Generating D:\Flutter Projects\video_player_example\android\app\src\main\java\io\flutter\plugins\GeneratedPluginRegistrant.java
[  +52 ms] ro.hardware = ranchu
[  +12 ms] Using hardware rendering with device sdk gphone x86. If you notice graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
[  +25 ms] Initializing file store
[  +11 ms] Skipping target: gen_localizations
[   +4 ms] complete
[   +5 ms] Launching lib\main.dart on sdk gphone x86 in debug mode...
[   +6 ms] C:\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev C:\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root
C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --incremental --target=flutter --debugger-module-names --experimental-emit-debug-metadata -DFLUTTER_WEB_AUTO_DETECT=true --output-dill
C:\Users\BACANC~1\AppData\Local\Temp\flutter_tools.495f2da8\flutter_tool.a1643c0c\app.dill --packages D:\Flutter Projects\video_player_example\.dart_tool\package_config.json -Ddart.vm.profile=false
-Ddart.vm.product=false --enable-asserts --track-widget-creation --filesystem-scheme org-dartlang-root --initialize-from-dill build\3c113a45063dc6628e68a4111abcacad.cache.dill.track.dill
--enable-experiment=alternative-invalidation-strategy
[  +13 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\build-tools\30.0.3\aapt dump xmltree D:\Flutter Projects\video_player_example\build\app\outputs\flutter-apk\app.apk
AndroidManifest.xml
[  +25 ms] Exit code 0 from: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\build-tools\30.0.3\aapt dump xmltree D:\Flutter Projects\video_player_example\build\app\outputs\flutter-apk\app.apk
AndroidManifest.xml
[        ] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1e
               A: android:compileSdkVersionCodename(0x01010573)="11" (Raw: "11")
               A: package="com.example.video_player_example" (Raw: "com.example.video_player_example")
               A: platformBuildVersionCode=(type 0x10)0x1e
               A: platformBuildVersionName=(type 0x10)0xb
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1e
               E: uses-permission (line=14)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: uses-permission (line=15)
                 A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
               E: application (line=17)
                 A: android:label(0x01010001)="video_player_example" (Raw: "video_player_example")
                 A: android:icon(0x01010002)=@0x7f080000
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=22)
                   A: android:theme(0x01010000)=@0x7f0a0000
                   A: android:name(0x01010003)="com.example.video_player_example.MainActivity" (Raw: "com.example.video_player_example.MainActivity")
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=36)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0a0001
                   E: meta-data (line=46)
                     A: android:name(0x01010003)="io.flutter.embedding.android.SplashScreenDrawable" (Raw: "io.flutter.embedding.android.SplashScreenDrawable")
                     A: android:resource(0x01010025)=@0x7f040000
                   E: intent-filter (line=50)
                     E: action (line=51)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=53)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                 E: meta-data (line=60)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
[  +10 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[  +13 ms] <- compile package:video_player_example/main.dart
[  +43 ms] --------- beginning of main
           09-15 12:55:12.321 D/InterruptionStateProvider(  677): No heads up: unimportant notification: 0|com.roguefireflymedia.crisscrossmobile|99778|null|10156
[  +13 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe version
[  +28 ms] Android Debug Bridge version 1.0.41
           Version 31.0.2-7242960
           Installed as C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe
[   +2 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe start-server
[  +53 ms] Building APK
[  +21 ms] Running Gradle task 'assembleDebug'...
[   +5 ms] Using gradle from D:\Flutter Projects\video_player_example\android\gradlew.bat.
[  +12 ms] executing: C:\Program Files\Android\Android Studio\jre\bin\java -version
[  +90 ms] Exit code 0 from: C:\Program Files\Android\Android Studio\jre\bin\java -version
[        ] openjdk version "1.8.0_242-release"
           OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
           OpenJDK 64-Bit Server VM (build 25.242-b01, mixed mode)
[   +2 ms] executing: [D:\Flutter Projects\video_player_example\android/] D:\Flutter Projects\video_player_example\android\gradlew.bat -Pverbose=true -Ptarget-platform=android-x86 -Ptarget=D:\Flutter
Projects\video_player_example\lib\main.dart -Pdart-defines=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ== -Pdart-obfuscation=false -Ptrack-widget-creation=true -Ptree-shake-icons=false
-Pfilesystem-scheme=org-dartlang-root assembleDebug
[+3612 ms] > Task :app:compileFlutterBuildDebug
[        ] [  +62 ms] executing: [C:\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] [  +71 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] [        ] f4abaa0735eba4dfd8f33f73363911d63931fe03
[        ] [   +1 ms] executing: [C:\flutter/] git tag --points-at f4abaa0735eba4dfd8f33f73363911d63931fe03
[   +1 ms] [  +52 ms] Exit code 0 from: git tag --points-at f4abaa0735eba4dfd8f33f73363911d63931fe03
[        ] [        ] 2.2.3
[        ] [   +4 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[        ] [  +34 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[   +1 ms] [        ] origin/stable
[   +1 ms] [        ] executing: [C:\flutter/] git ls-remote --get-url origin
[   +1 ms] [  +31 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] [        ] https://github.com/flutter/flutter.git
[   +1 ms] [  +55 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref HEAD
[   +1 ms] [  +34 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] [        ] stable
[   +4 ms] [  +56 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[   +6 ms] [        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +1 ms] [   +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[        ] [  +96 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update.
[   +4 ms] [        ] Artifact Instance of 'GradleWrapper' is not required, skipping update.
[   +2 ms] [   +3 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FlutterSdk' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[   +3 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'PubDependencies' is not required, skipping update.
[        ] [  +37 ms] Initializing file store
[   +1 ms] [  +25 ms] Skipping target: gen_localizations
[   +1 ms] [   +6 ms] kernel_snapshot: Starting due to {}
[   +2 ms] [  +15 ms] C:\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev C:\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root
C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --target=flutter --no-print-incremental-dependencies -DFLUTTER_WEB_AUTO_DETECT=true -Ddart.vm.profile=false -Ddart.vm.product=false
--enable-asserts --track-widget-creation --no-link-platform --packages D:\Flutter Projects\video_player_example\.dart_tool\package_config.json --output-dill D:\Flutter
Projects\video_player_example\.dart_tool\flutter_build\35d3eb7c244acc8e2ebf2a29f73582c2\app.dill --depfile D:\Flutter
Projects\video_player_example\.dart_tool\flutter_build\35d3eb7c244acc8e2ebf2a29f73582c2\kernel_snapshot.d package:video_player_example/main.dart
[+8125 ms] [+8543 ms] kernel_snapshot: Complete
[ +502 ms] [ +442 ms] debug_android_application: Starting due to {}
[  +91 ms] [ +130 ms] debug_android_application: Complete
[ +499 ms] [ +507 ms] Persisting file store
[   +2 ms] [   +7 ms] Done persisting file store
[  +91 ms] [   +5 ms] build succeeded.
[   +1 ms] [  +10 ms] "flutter assemble" took 9,853ms.
[ +105 ms] [ +170 ms] ensureAnalyticsSent: 167ms
[        ] [   +1 ms] Running shutdown hooks
[        ] [        ] Shutdown hooks complete
[        ] [   +1 ms] exiting with code 0
[ +105 ms] Parameter format not correct -
[  +95 ms] > Task :app:packLibsflutterBuildDebug UP-TO-DATE
[   +1 ms] > Task :app:preBuild UP-TO-DATE
[        ] > Task :app:preDebugBuild UP-TO-DATE
[        ] > Task :video_player:preBuild UP-TO-DATE
[        ] > Task :video_player:preDebugBuild UP-TO-DATE
[        ] > Task :video_player:compileDebugAidl NO-SOURCE
[        ] > Task :app:compileDebugAidl NO-SOURCE
[        ] > Task :video_player:packageDebugRenderscript NO-SOURCE
[        ] > Task :app:compileDebugRenderscript NO-SOURCE
[        ] > Task :app:generateDebugBuildConfig UP-TO-DATE
[        ] > Task :video_player:writeDebugAarMetadata UP-TO-DATE
[  +87 ms] > Task :app:checkDebugAarMetadata UP-TO-DATE
[        ] > Task :app:cleanMergeDebugAssets
[   +1 ms] > Task :app:mergeDebugShaders UP-TO-DATE
[        ] > Task :app:compileDebugShaders NO-SOURCE
[        ] > Task :app:generateDebugAssets UP-TO-DATE
[        ] > Task :video_player:mergeDebugShaders UP-TO-DATE
[        ] > Task :video_player:compileDebugShaders NO-SOURCE
[        ] > Task :video_player:generateDebugAssets UP-TO-DATE
[        ] > Task :video_player:packageDebugAssets UP-TO-DATE
[        ] > Task :app:mergeDebugAssets
[ +195 ms] > Task :app:copyFlutterAssetsDebug
[   +1 ms] > Task :app:generateDebugResValues UP-TO-DATE
[        ] > Task :app:generateDebugResources UP-TO-DATE
[        ] > Task :video_player:compileDebugRenderscript NO-SOURCE
[   +1 ms] > Task :video_player:generateDebugResValues UP-TO-DATE
[        ] > Task :video_player:generateDebugResources UP-TO-DATE
[        ] > Task :video_player:packageDebugResources UP-TO-DATE
[        ] > Task :app:mergeDebugResources UP-TO-DATE
[        ] > Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
[        ] > Task :app:extractDeepLinksDebug UP-TO-DATE
[        ] > Task :video_player:extractDeepLinksDebug UP-TO-DATE
[        ] > Task :video_player:processDebugManifest UP-TO-DATE
[ +103 ms] > Task :app:processDebugMainManifest UP-TO-DATE
[        ] > Task :app:processDebugManifest UP-TO-DATE
[        ] > Task :app:processDebugManifestForPackage UP-TO-DATE
[        ] > Task :video_player:compileDebugLibraryResources UP-TO-DATE
[   +1 ms] > Task :video_player:parseDebugLocalResources UP-TO-DATE
[   +1 ms] > Task :video_player:generateDebugRFile UP-TO-DATE
[  +89 ms] > Task :app:processDebugResources UP-TO-DATE
[   +5 ms] > Task :video_player:generateDebugBuildConfig UP-TO-DATE
[   +4 ms] > Task :video_player:javaPreCompileDebug UP-TO-DATE
[   +2 ms] > Task :video_player:compileDebugJavaWithJavac UP-TO-DATE
[        ] > Task :video_player:bundleLibCompileToJarDebug UP-TO-DATE
[  +19 ms] > Task :app:compileDebugKotlin UP-TO-DATE
[   +2 ms] > Task :app:javaPreCompileDebug UP-TO-DATE
[        ] > Task :app:compileDebugJavaWithJavac UP-TO-DATE
[        ] > Task :app:compileDebugSources UP-TO-DATE
[        ] > Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
[   +2 ms] > Task :app:processDebugJavaRes NO-SOURCE
[   +4 ms] > Task :video_player:processDebugJavaRes NO-SOURCE
[        ] > Task :video_player:bundleLibResDebug NO-SOURCE
[  +53 ms] > Task :app:mergeDebugJavaResource UP-TO-DATE
[   +1 ms] > Task :video_player:bundleLibRuntimeToJarDebug UP-TO-DATE
[   +7 ms] > Task :app:checkDebugDuplicateClasses UP-TO-DATE
[  +23 ms] > Task :app:dexBuilderDebug UP-TO-DATE
[   +4 ms] > Task :app:desugarDebugFileDependencies UP-TO-DATE
[  +53 ms] > Task :app:mergeExtDexDebug UP-TO-DATE
[   +2 ms] > Task :app:mergeDexDebug UP-TO-DATE
[  +10 ms] > Task :app:mergeDebugJniLibFolders UP-TO-DATE
[        ] > Task :video_player:mergeDebugJniLibFolders UP-TO-DATE
[   +1 ms] > Task :video_player:mergeDebugNativeLibs NO-SOURCE
[   +2 ms] > Task :video_player:stripDebugDebugSymbols NO-SOURCE
[   +8 ms] > Task :video_player:copyDebugJniLibsProjectOnly UP-TO-DATE
[   +2 ms] > Task :app:mergeDebugNativeLibs UP-TO-DATE
[   +1 ms] > Task :app:stripDebugDebugSymbols UP-TO-DATE
[   +2 ms] > Task :app:validateSigningDebug UP-TO-DATE
[        ] > Task :video_player:copyDebugJniLibsProjectAndLocalJars UP-TO-DATE
[  +76 ms] > Task :video_player:extractDebugAnnotations UP-TO-DATE
[        ] > Task :video_player:mergeDebugGeneratedProguardFiles UP-TO-DATE
[        ] > Task :video_player:mergeDebugConsumerProguardFiles UP-TO-DATE
[        ] > Task :video_player:prepareLintJarForPublish UP-TO-DATE
[        ] > Task :video_player:mergeDebugJavaResource UP-TO-DATE
[        ] > Task :video_player:syncDebugLibJars UP-TO-DATE
[        ] > Task :video_player:bundleDebugAar UP-TO-DATE
[        ] > Task :video_player:mergeDebugResources UP-TO-DATE
[        ] > Task :video_player:compileDebugSources UP-TO-DATE
[        ] > Task :video_player:assembleDebug UP-TO-DATE
[ +500 ms] > Task :app:compressDebugAssets
[ +596 ms] > Task :app:packageDebug
[  +67 ms] > Task :app:assembleDebug
[   +1 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
[        ] Use '--warning-mode all' to show the individual deprecation warnings.
[        ] See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings
[        ] BUILD SUCCESSFUL in 15s
[        ] 58 actionable tasks: 7 executed, 51 up-to-date
[ +537 ms] Running Gradle task 'assembleDebug'... (completed in 15.9s)
[  +38 ms] calculateSha: LocalDirectory: 'D:\Flutter Projects\video_player_example\build\app\outputs\flutter-apk'/app.apk
[ +619 ms] √  Built build\app\outputs\flutter-apk\app-debug.apk.
[   +3 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\build-tools\30.0.3\aapt dump xmltree D:\Flutter Projects\video_player_example\build\app\outputs\flutter-apk\app.apk
AndroidManifest.xml
[  +20 ms] Exit code 0 from: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\build-tools\30.0.3\aapt dump xmltree D:\Flutter Projects\video_player_example\build\app\outputs\flutter-apk\app.apk
AndroidManifest.xml
[   +1 ms] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1e
               A: android:compileSdkVersionCodename(0x01010573)="11" (Raw: "11")
               A: package="com.example.video_player_example" (Raw: "com.example.video_player_example")
               A: platformBuildVersionCode=(type 0x10)0x1e
               A: platformBuildVersionName=(type 0x10)0xb
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1e
               E: uses-permission (line=14)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: uses-permission (line=15)
                 A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
               E: application (line=17)
                 A: android:label(0x01010001)="video_player_example" (Raw: "video_player_example")
                 A: android:icon(0x01010002)=@0x7f080000
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=22)
                   A: android:theme(0x01010000)=@0x7f0a0000
                   A: android:name(0x01010003)="com.example.video_player_example.MainActivity" (Raw: "com.example.video_player_example.MainActivity")
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=36)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0a0001
                   E: meta-data (line=46)
                     A: android:name(0x01010003)="io.flutter.embedding.android.SplashScreenDrawable" (Raw: "io.flutter.embedding.android.SplashScreenDrawable")
                     A: android:resource(0x01010025)=@0x7f040000
                   E: intent-filter (line=50)
                     E: action (line=51)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=53)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                 E: meta-data (line=60)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
[   +6 ms] Stopping app 'app.apk' on sdk gphone x86.
[        ] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell am force-stop com.example.video_player_example
[  +57 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell pm list packages com.example.video_player_example
[  +45 ms] package:com.example.video_player_example
[   +1 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell cat /data/local/tmp/sky.com.example.video_player_example.sha1
[  +46 ms] f8233b764d510463de84cc225377139f685e28e5
[        ] Installing APK.
[   +1 ms] Installing build\app\outputs\flutter-apk\app.apk...
[        ] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 install -t -r D:\Flutter
Projects\video_player_example\build\app\outputs\flutter-apk\app.apk
[ +786 ms] Performing Streamed Install
                    Success
[   +1 ms] Installing build\app\outputs\flutter-apk\app.apk... (completed in 787ms)
[   +2 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell echo -n 0fb05d4d7e1aaf960b50705d4dcf9380933ba486 >
/data/local/tmp/sky.com.example.video_player_example.sha1
[  +48 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[  +65 ms] --------- beginning of main
           09-15 12:55:34.656 I/InputReader(  511): Reconfiguring input devices, changes=KEYBOARD_LAYOUTS |
[   +9 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell am start -a android.intent.action.RUN -f 0x20000000 --ez
enable-background-compilation true --ez enable-dart-profiling true --ez enable-checked-mode true --ez verify-entry-points true
com.example.video_player_example/com.example.video_player_example.MainActivity
[ +207 ms] Starting: Intent { act=android.intent.action.RUN flg=0x20000000 cmp=com.example.video_player_example/.MainActivity (has extras) }
[   +1 ms] Waiting for observatory port to be available...
[+1364 ms] Observatory URL on device: http://<IP_ADDRESS>:39415/GM_aNmscY3A=/
[   +2 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward tcp:0 tcp:39415
[  +26 ms] 59350
[        ] Forwarded host port 59350 to device port 39415 for Observatory
[   +5 ms] Caching compiled dill
[  +29 ms] Connecting to service protocol: http://<IP_ADDRESS>:59350/GM_aNmscY3A=/
[ +357 ms] Launching a Dart Developer Service (DDS) instance at http://<IP_ADDRESS>:0, connecting to VM service at http://<IP_ADDRESS>:59350/GM_aNmscY3A=/.
[ +116 ms] DDS is listening at http://<IP_ADDRESS>:59353/toB4DyOb28o=/.
[  +55 ms] Successfully connected to service protocol: http://<IP_ADDRESS>:59350/GM_aNmscY3A=/
[  +30 ms] DevFS: Creating new filesystem on the device (null)
[  +49 ms] DevFS: Created new filesystem on the device (file:///data/user/0/com.example.video_player_example/code_cache/video_player_exampleSIXTRM/video_player_example/)
[   +1 ms] Updating assets
[  +85 ms] Syncing files to device sdk gphone x86...
[   +2 ms] <- reset
[        ] Compiling dart to kernel with 0 updated files
[   +2 ms] <- recompile package:video_player_example/main.dart 664d8fce-343c-416c-9868-1ccae8848e55
[        ] <- 664d8fce-343c-416c-9868-1ccae8848e55
[  +87 ms] Updating files.
[        ] DevFS: Sync finished
[        ] Syncing files to device sdk gphone x86... (completed in 93ms)
[        ] Synced 0.0MB.
[   +1 ms] <- accept
[  +10 ms] Connected to _flutterView/0xf274f820.
[   +2 ms] Flutter run key commands.
[   +2 ms] r Hot reload.
[   +1 ms] R Hot restart.
[        ] h Repeat this help message.
[        ] d Detach (terminate "flutter run" but leave application running).
[        ] c Clear the screen
[        ] q Quit (terminate the application on the device).
[        ]  Running with sound null safety
[   +1 ms] An Observatory debugger and profiler on sdk gphone x86 is available at: http://<IP_ADDRESS>:59353/toB4DyOb28o=/
[ +161 ms] Activating Dart DevTools...
[ +649 ms] W/_player_exampl( 9050): Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (greylist, reflection, allowed)
[  +29 ms] I/ExoPlayerImpl( 9050): Init d46cae3 [ExoPlayerLib/2.14.1] [generic_x86_arm, sdk_gphone_x86, Google, 30]
[  +48 ms] I/TetheringManager( 9050): registerTetheringEventCallback:com.example.video_player_example
[ +398 ms] I/VideoCapabilities( 9050): Unsupported profile 4 for video/mp4v-es
[  +41 ms] I/OMXClient( 9050): IOmx service obtained
[   +2 ms] D/SurfaceUtils( 9050): connecting to surface 0xed0d79e8, reason connectToSurface
[        ] I/MediaCodec( 9050): [OMX.android.goldfish.h264.decoder] setting surface generation to 9267201
[        ] D/SurfaceUtils( 9050): disconnecting from surface 0xed0d79e8, reason connectToSurface(reconnect)
[        ] D/SurfaceUtils( 9050): connecting to surface 0xed0d79e8, reason connectToSurface(reconnect)
[        ] E/ACodec  ( 9050): [OMX.android.goldfish.h264.decoder] setPortMode on output to DynamicANWBuffer failed w/ err -1010
[   +3 ms] I/ACodec  ( 9050): codec does not support config priority (err -1010)
[  +33 ms] D/SurfaceUtils( 9050): disconnecting from surface 0xed0d79e8, reason setNativeWindowSizeFormatAndUsage
[   +1 ms] D/SurfaceUtils( 9050): connecting to surface 0xed0d79e8, reason setNativeWindowSizeFormatAndUsage
[        ] D/SurfaceUtils( 9050): set up nativeWindow 0xed0d79e8 for 1280x720, color 0x13, rotation 0, usage 0x1002900
[   +1 ms] W/Gralloc4( 9050): allocator 3.x is not supported
[  +77 ms] D/CCodec  ( 9050): allocate(c2.android.aac.decoder)
[   +6 ms] I/Codec2Client( 9050): Available Codec2 services: "software"
[  +16 ms] I/CCodec  ( 9050): Created component [c2.android.aac.decoder]
[   +1 ms] D/CCodecConfig( 9050): read media type: audio/mp4a-latm
[   +4 ms] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: algo.buffers.max-count.values
[   +2 ms] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: output.subscribed-indices.values
[   +1 ms] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: input.buffers.allocator-ids.values
[        ] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: output.buffers.allocator-ids.values
[   +4 ms] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: algo.buffers.allocator-ids.values
[   +2 ms] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: output.buffers.pool-ids.values
[   +2 ms] D/ReflectedParamUpdater( 9050): extent() != 1 for single value type: algo.buffers.pool-ids.values
[   +4 ms] I/CCodecConfig( 9050): query failed after returning 19 values (BAD_INDEX)
[   +6 ms] D/CCodecConfig( 9050): c2 config diff is Dict {
[   +5 ms] D/CCodecConfig( 9050):   c2::u32 coded.aac-packaging.value = 0
[   +4 ms] D/CCodecConfig( 9050):   c2::u32 coded.bitrate.value = 64000
[   +1 ms] D/CCodecConfig( 9050):   c2::u32 coded.pl.level = 0
[   +1 ms] D/CCodecConfig( 9050):   c2::u32 coded.pl.profile = 8192
[   +7 ms] D/CCodecConfig( 9050):   c2::i32 coding.drc.album-mode.value = 0
[   +1 ms] D/CCodecConfig( 9050):   c2::float coding.drc.attenuation-factor.value = 1
[   +4 ms] D/CCodecConfig( 9050):   c2::float coding.drc.boost-factor.value = 1
[   +8 ms] D/CCodecConfig( 9050):   c2::i32 coding.drc.compression-mode.value = 3
[  +10 ms] D/CCodecConfig( 9050):   c2::i32 coding.drc.effect-type.value = 3
[   +8 ms] D/CCodecConfig( 9050):   c2::float coding.drc.encoded-level.value = 0.25
[   +1 ms] D/CCodecConfig( 9050):   c2::float coding.drc.reference-level.value = -16
[   +1 ms] D/CCodecConfig( 9050):   c2::u32 input.buffers.max-size.value = 8192
[   +1 ms] D/CCodecConfig( 9050):   c2::u32 input.delay.value = 0
[   +1 ms] D/CCodecConfig( 9050):   string input.media-type.value = "audio/mp4a-latm"
[        ] D/CCodecConfig( 9050):   c2::u32 output.delay.value = 2
[        ] D/CCodecConfig( 9050):   c2::float output.drc.output-loudness.value = 0.25
[   +2 ms] D/CCodecConfig( 9050):   string output.media-type.value = "audio/raw"
[   +3 ms] D/CCodecConfig( 9050):   c2::u32 raw.channel-count.value = 1
[   +1 ms] D/CCodecConfig( 9050):   c2::u32 raw.max-channel-count.value = 8
[   +1 ms] D/CCodecConfig( 9050):   c2::u32 raw.sample-rate.value = 44100
[        ] D/CCodecConfig( 9050): }
[   +2 ms] D/CCodec  ( 9050): [c2.android.aac.decoder] buffers are bound to CCodec for this session
[   +1 ms] D/CCodecConfig( 9050): no c2 equivalents for flags
[        ] D/CCodecConfig( 9050): config failed => CORRUPTED
[        ] D/CCodecConfig( 9050): c2 config diff is   c2::u32 raw.channel-count.value = 2
[        ] D/CCodecConfig( 9050):   c2::u32 raw.sample-rate.value = 48000
[        ] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[        ] D/CCodec  ( 9050): client requested max input size 579, which is smaller than what component recommended (8192); overriding with component recommendation.
[        ] W/CCodec  ( 9050): This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
[   +1 ms] D/CCodec  ( 9050): setup formats input: AMessage(what = 0x00000000) = {
[        ] D/CCodec  ( 9050):   int32_t aac-drc-album-mode = 0
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-drc-boost-level = 127
[        ] D/CCodec  ( 9050):   int32_t aac-drc-cut-level = 127
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-drc-effect-type = 3
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-drc-heavy-compression = 3
[        ] D/CCodec  ( 9050):   int32_t aac-encoded-target-level = -1
[        ] D/CCodec  ( 9050):   int32_t aac-max-output-channel_count = 8
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-target-ref-level = 64
[        ] D/CCodec  ( 9050):   int32_t channel-count = 2
[        ] D/CCodec  ( 9050):   int32_t level = 0
[        ] D/CCodec  ( 9050):   int32_t max-input-size = 8192
[        ] D/CCodec  ( 9050):   string mime = "audio/mp4a-latm"
[        ] D/CCodec  ( 9050):   int32_t profile = 2
[        ] D/CCodec  ( 9050):   int32_t sample-rate = 48000
[        ] D/CCodec  ( 9050): } and output: AMessage(what = 0x00000000) = {
[        ] D/CCodec  ( 9050):   int32_t aac-drc-album-mode = 0
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-drc-boost-level = 127
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-drc-cut-level = 127
[   +2 ms] D/CCodec  ( 9050):   int32_t aac-drc-effect-type = 3
[        ] D/CCodec  ( 9050):   int32_t aac-drc-heavy-compression = 3
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-drc-output-loudness = -1
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-encoded-target-level = -1
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-max-output-channel_count = 8
[   +1 ms] D/CCodec  ( 9050):   int32_t aac-target-ref-level = 64
[   +1 ms] D/CCodec  ( 9050):   int32_t channel-count = 2
[        ] D/CCodec  ( 9050):   string mime = "audio/raw"
[   +1 ms] D/CCodec  ( 9050):   int32_t sample-rate = 48000
[        ] D/CCodec  ( 9050): }
[        ] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[        ] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[        ] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[   +1 ms] E/FMQ     ( 9050): grantorIdx must be less than 3
[   +2 ms] E/FMQ     ( 9050): grantorIdx must be less than 3
[   +2 ms] D/CCodecBufferChannel( 9050): [c2.android.aac.decoder#370] Created input block pool with allocatorID 16 => poolID 17 - OK (0)
[   +1 ms] I/CCodecBufferChannel( 9050): [c2.android.aac.decoder#370] Created output block pool with allocatorID 16 => poolID 132 - OK
[        ] D/CCodecBufferChannel( 9050): [c2.android.aac.decoder#370] Configured output block pool ids 132 => OK
[        ] E/ion     ( 9050): ioctl c0044901 failed with code -1: Inappropriate ioctl for device
[        ] E/FMQ     ( 9050): grantorIdx must be less than 3
[        ] E/FMQ     ( 9050): grantorIdx must be less than 3
[   +1 ms] D/CCodecConfig( 9050): c2 config diff is   c2::i32 coding.drc.compression-mode.value = 1
[   +1 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:Output[N]] popFromStashAndRegister: output format changed to AMessage(what = 0x00000000) = {
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-album-mode = 0
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-boost-level = 127
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-cut-level = 127
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-effect-type = 3
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-heavy-compression = 1
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-output-loudness = -1
[        ] D/CCodecBuffers( 9050):   int32_t aac-encoded-target-level = -1
[        ] D/CCodecBuffers( 9050):   int32_t aac-max-output-channel_count = 8
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-target-ref-level = 64
[   +3 ms] D/CCodecBuffers( 9050):   int32_t channel-count = 2
[        ] D/CCodecBuffers( 9050):   string mime = "audio/raw"
[   +1 ms] D/CCodecBuffers( 9050):   int32_t sample-rate = 48000
[        ] D/CCodecBuffers( 9050): }
[  +94 ms] I/flutter ( 9050): Total Duration: 7540000
[  +24 ms] D/AudioTrack( 9050): getTimestamp_l(158): device stall time corrected using current time<PHONE_NUMBER>800
[ +178 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[ +248 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 2)
[  +85 ms] I/flutter ( 9050): Current Duration: 0
[   +2 ms] I/flutter ( 9050): Current Duration: 509000
[  +14 ms] I/flutter ( 9050): Current Duration: 509000
[ +471 ms] I/flutter ( 9050): Current Duration: 509000
[   +1 ms] I/flutter ( 9050): Current Duration: 1002000
[  +35 ms] I/flutter ( 9050): Current Duration: 1002000
[ +466 ms] I/flutter ( 9050): Current Duration: 1002000
[        ] I/flutter ( 9050): Current Duration: 1510000
[ +313 ms] I/flutter ( 9050): Current Duration: 1510000
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[ +119 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 1)
[   +1 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 2)
[  +60 ms] I/flutter ( 9050): Current Duration: 1510000
[        ] I/flutter ( 9050): Current Duration: 2005000
[  +71 ms] I/flutter ( 9050): Current Duration: 2005000
[ +429 ms] I/flutter ( 9050): Current Duration: 2005000
[   +2 ms] I/flutter ( 9050): Current Duration: 2510000
[ +178 ms] I/flutter ( 9050): Current Duration: 2510000
[ +319 ms] I/flutter ( 9050): Current Duration: 2510000
[        ] I/flutter ( 9050): Current Duration: 3011000
[ +255 ms] I/flutter ( 9050): Current Duration: 3011000
[ +242 ms] I/flutter ( 9050): Current Duration: 3011000
[        ] I/flutter ( 9050): Current Duration: 3507000
[  +98 ms] I/flutter ( 9050): Current Duration: 3507000
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[ +133 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 1)
[ +265 ms] I/flutter ( 9050): Current Duration: 3507000
[   +5 ms] I/flutter ( 9050): Current Duration: 4004000
[ +497 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[        ] I/flutter ( 9050): Current Duration: 4004000
[        ] I/flutter ( 9050): Current Duration: 4509000
[ +199 ms] I/flutter ( 9050): Current Duration: 4509000
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[  +58 ms] D/BufferPoolAccessor2.0( 9050): bufferpool2 0xf244bd48 : 6(49152 size) total buffers - 5(40960 size) used buffers - 1/7 (recycle/alloc) - 6/290 (fetch/transfer)
[        ] D/BufferPoolAccessor2.0( 9050): evictor expired: 1, evicted: 1
[ +236 ms] I/flutter ( 9050): Current Duration: 4509000
[   +2 ms] I/flutter ( 9050): Current Duration: 5005000
[ +294 ms] I/flutter ( 9050): Current Duration: 5005000
[ +202 ms] I/flutter ( 9050): Current Duration: 5005000
[   +1 ms] I/flutter ( 9050): Current Duration: 5507000
[ +506 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[   +1 ms] I/flutter ( 9050): Current Duration: 5507000
[        ] I/flutter ( 9050): Current Duration: 6003000
[ +499 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[        ] I/flutter ( 9050): Current Duration: 6003000
[        ] I/flutter ( 9050): Current Duration: 6512000
[ +493 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[   +1 ms] I/flutter ( 9050): Current Duration: 6512000
[        ] I/flutter ( 9050): Current Duration: 7002000
[  +32 ms] I/flutter ( 9050): Current Duration: 7002000
[   +1 ms] I/CCodecConfig( 9050): query failed after returning 19 values (BAD_INDEX)
[   +1 ms] D/CCodecConfig( 9050): c2 config diff is   c2::i32 coding.drc.compression-mode.value = 3
[   +1 ms] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[   +1 ms] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[   +1 ms] W/Codec2Client( 9050): query -- param skipped: index =<PHONE_NUMBER>.
[   +8 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:Output[N]] popFromStashAndRegister: output format changed to AMessage(what = 0x00000000) = {
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-album-mode = 0
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-boost-level = 127
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-cut-level = 127
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-effect-type = 3
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-heavy-compression = 3
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-output-loudness = -1
[   +2 ms] D/CCodecBuffers( 9050):   int32_t aac-encoded-target-level = -1
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-max-output-channel_count = 8
[        ] D/CCodecBuffers( 9050):   int32_t aac-target-ref-level = 64
[        ] D/CCodecBuffers( 9050):   int32_t channel-count = 2
[   +1 ms] D/CCodecBuffers( 9050):   string mime = "audio/raw"
[        ] D/CCodecBuffers( 9050):   int32_t sample-rate = 48000
[        ] D/CCodecBuffers( 9050): }
[   +1 ms] D/CCodecConfig( 9050): c2 config diff is   c2::i32 coding.drc.compression-mode.value = 1
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:Output[N]] popFromStashAndRegister: output format changed to AMessage(what = 0x00000000) = {
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-album-mode = 0
[        ] D/CCodecBuffers( 9050):   int32_t aac-drc-boost-level = 127
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-cut-level = 127
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-effect-type = 3
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-heavy-compression = 1
[   +2 ms] D/CCodecBuffers( 9050):   int32_t aac-drc-output-loudness = -1
[        ] D/CCodecBuffers( 9050):   int32_t aac-encoded-target-level = -1
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-max-output-channel_count = 8
[   +1 ms] D/CCodecBuffers( 9050):   int32_t aac-target-ref-level = 64
[        ] D/CCodecBuffers( 9050):   int32_t channel-count = 2
[        ] D/CCodecBuffers( 9050):   string mime = "audio/raw"
[        ] D/CCodecBuffers( 9050):   int32_t sample-rate = 48000
[        ] D/CCodecBuffers( 9050): }
[ +417 ms] I/flutter ( 9050): Current Duration: 7002000
[        ] I/flutter ( 9050): Current Duration: 7511000
[ +184 ms] I/flutter ( 9050): Current Duration: 7511000
[ +314 ms] I/flutter ( 9050): Current Duration: 7511000
[        ] I/flutter ( 9050): Current Duration: 476000
[ +173 ms] Activating Dart DevTools... (completed in 9.8s)
[  +86 ms] I/flutter ( 9050): Current Duration: 476000
[ +239 ms] I/flutter ( 9050): Current Duration: 476000
[        ] I/flutter ( 9050): Current Duration: 976000
[  +74 ms] I/flutter ( 9050): Current Duration: 976000
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 3)
[ +307 ms] The Flutter DevTools debugger and profiler on sdk gphone x86 is available at: http://<IP_ADDRESS>:9101?uri=http%3A%2F%2F<IP_ADDRESS>%3A59353%2FtoB4DyOb28o%3D%2F
[  +84 ms] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[  +31 ms] I/flutter ( 9050): Current Duration: 976000
[        ] I/flutter ( 9050): Current Duration: 1474000
[  +60 ms] I/flutter ( 9050): Current Duration: 1474000
[        ] D/CCodecBuffers( 9050): [c2.android.aac.decoder#370:1D-Input.Impl[N]] codec released a buffer owned by client (index 0)
[ +438 ms] I/flutter ( 9050): Current Duration: 1474000
[        ] I/flutter ( 9050): Current Duration: 1984000
[ +396 ms] I/flutter ( 9050): Current Duration: 1984000
[        ] D/BufferPoolAccessor2.0( 9050): bufferpool2 0xf244bd48 : 5(40960 size) total buffers - 5(40960 size) used buffers - 1/7 (recycle/alloc) - 8/508 (fetch/transfer)
[ +103 ms] I/flutter ( 9050): Current Duration: 1984000
[        ] I/flutter ( 9050): Current Duration: 2482000
[ +498 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[   +1 ms] I/flutter ( 9050): Current Duration: 2482000
[        ] I/flutter ( 9050): Current Duration: 3407000
[  +14 ms] I/flutter ( 9050): Current Duration: 3407000
[ +481 ms] I/flutter ( 9050): Current Duration: 3407000
[   +1 ms] I/flutter ( 9050): Current Duration: 3902000
[ +501 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[   +4 ms] I/flutter ( 9050): Current Duration: 3902000
[        ] I/flutter ( 9050): Current Duration: 4401000
[ +487 ms] I/flutter ( 9050): Current Duration: 4401000
[   +8 ms] I/flutter ( 9050): Current Duration: 4401000
[   +1 ms] I/flutter ( 9050): Current Duration: 4899000
[ +493 ms] I/chatty  ( 9050): uid=10157(com.example.video_player_example) 1.ui identical 1 line
[   +1 ms] I/flutter ( 9050): Current Duration: 4899000
[        ] I/flutter ( 9050): Current Duration: 5398000
[ +254 ms] DevFS: Deleting filesystem on the device (file:///data/user/0/com.example.video_player_example/code_cache/video_player_exampleSIXTRM/video_player_example/)
[   +7 ms] DevFS: Deleted filesystem on the device (file:///data/user/0/com.example.video_player_example/code_cache/video_player_exampleSIXTRM/video_player_example/)
[  +90 ms] Service protocol connection closed.
[   +1 ms] Application finished.
[   +4 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward --list
[  +26 ms] Exit code 0 from: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward --list
[        ] emulator-5554 tcp:59350 tcp:39415
[   +1 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward --remove tcp:59350
[  +31 ms] executing: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward --list
[  +32 ms] Exit code 0 from: C:\Users\Bacancy Technology\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 forward --list
[   +2 ms] "flutter run" took 35,655ms.
[ +172 ms] ensureAnalyticsSent: 168ms
[   +1 ms] Running shutdown hooks
[        ] Shutdown hooks complete
[   +1 ms] exiting with code 0

flutter analyze
D:\Flutter Projects\video_player_example>flutter analyze
Analyzing video_player_example...
No issues found! (ran in 1.7s)

flutter doctor -v

D:\Flutter Projects\video_player_example>flutter doctor -v
[√] Flutter (Channel stable, 2.2.3, on Microsoft Windows [Version 10.0.19043.1165], locale en-IN)
    • Flutter version 2.2.3 at C:\flutter
    • Framework revision f4abaa0735 (3 months ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at C:\Users\Bacancy Technology\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

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

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] VS Code (version 1.60.1)
    • VS Code at C:\Users\Bacancy Technology\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.26.0

[√] Connected device (3 available)
    • sdk gphone x86 (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • Chrome (web)            • chrome        • web-javascript • Google Chrome 93.0.4577.82
    • Edge (web)              • edge          • web-javascript • Microsoft Edge 93.0.961.47

• No issues found!

Issue is reproducible using video_player: ^2.2.0 on stable and master.

logs
setLooping: false
Launching lib/main.dart on iPhone 12 in debug mode...

Exited (sigterm)

flutter doctor -v
[✓] Flutter (Channel stable, 2.5.0, on macOS 11.5.1 20G80 darwin-arm, locale en-GB)
    • Flutter version 2.5.0 at /Users/nexus/dev/sdks/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 4cc385b4b8 (7 days ago), 2021-09-07 23:01:49 -0700
    • Engine revision f0826da7ef
    • Dart version 2.14.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.11.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[✓] VS Code (version 1.60.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.26.0

[✓] Connected device (3 available)
    • M2007J20CG (mobile) • 5dd3be00 • android-arm64  • Android 11 (API 30)
    • macOS (desktop)     • macos    • darwin-arm64   • macOS 11.5.1 20G80 darwin-arm
    • Chrome (web)        • chrome   • web-javascript • Google Chrome 93.0.4577.63

• No issues found!

[✓] Flutter (Channel master, 2.6.0-6.0.pre.94, on macOS 11.5.1 20G80 darwin-arm, locale en-GB)
    • Flutter version 2.6.0-6.0.pre.94 at /Users/nexus/dev/sdks/flutters
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ec61450030 (11 hours ago), 2021-09-14 19:12:05 -0400
    • Engine revision abb1980f65
    • Dart version 2.15.0 (build 2.15.0-96.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.5.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[✓] VS Code (version 1.60.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.26.0

[✓] Connected device (3 available)
    • M2007J20CG (mobile) • 5dd3be00 • android-arm64  • Android 11 (API 30)
    • macOS (desktop)     • macos    • darwin-arm64   • macOS 11.5.1 20G80 darwin-arm
    • Chrome (web)        • chrome   • web-javascript • Google Chrome 93.0.4577.63

• No issues found!

@danagbemava-nc AFAIK, I have been using this earlier too and had the same problem, probably in Flutter 2.0 too. At that time I did a workaround with the listener and then using seekTo.

Issue is reproducible using video_player: ^2.2.0 on stable and master.

On what platform(s)? Plugin issues are often platform-specific; we need to know which platform or platforms are impacted.

@stuartmorgan Tested on following devices:
Android

Pixel 4 simulator with Android 11
Vivo S1 (Real Device) Android 11

iOS:

iPhone 7 (real device) iOS 14.4
All simulators present in XCode

Web:

Chrome on Windows 10 and macOS BigSur
Edge on Windows 10

So I guess this is reproducible on all sorts of platforms.

Oh, I think I see what's happening here. Looping is handled on the native side, and isn't sending an event to Dart indicating when it happens. Dart only gets an update about the position from the native code every so often, so most likely what you are seeing is not that the video starts looping before the end, but that Dart isn't ever getting an update that happens exactly at the end of the video before it loops.
If we switched from an event-stream based approach to a polling based approach, we could easily include an event in the stream for the end point.

Yes @stuartmorgan, even I checked the code and there's no interference through dart. We are just calling the native exoPlayer functionality and creating a subscription to listen the changes.
If we go with polling based approach, won't it be inefficient if the user keeps on playing video for 10-15 mins?

We are just calling the native exoPlayer functionality and creating a subscription to listen the changes.

That's on the native side. The issue is that not everything that is known on the native side (such as when we loop) is currently reported to the Dart side.

If we go with polling based approach, won't it be inefficient if the user keeps on playing video for 10-15 mins?

I typo'd the "to" and "from" in my last sentence; I've edited it to fix it. The current way the Dart side gets position information is polling-based, which should be changed.

Ah right. Also, adding to this, I had a workaround, if I use listener, then the video goes till end and once the position and duration are equal, I seekTo the video to zero and play again.
However, this makes the video a bit janky as seekTo and play takes a bit of time (in microseconds) and the video looks paused at that time. If used setLooping, the video loops back without any pauses and looks perfect.

I had a workaround

What exactly is the issue you are trying to work around? Because if my analysis above is correct, then the title and "actual results" for this issue are misleading: the video is not actually restarting before it finishes, you just never get a position update that corresponds to the end of the video.

I had a workaround

What exactly is the issue you are trying to work around? Because if my analysis above is correct, then the title and "actual results" for this issue are misleading: the video is not actually restarting before it finishes, you just never get a position update that corresponds to the end of the video.

Yes the position is never equal to duration when setLooping is true. I didn't thought the way you specified, I thought that the video is getting replayed before it actually finishes.
Your representation of the issue is perfect and I guess we should change the title for the same.

Still facing this issue on flutter 2.10 and video_player 2.3.0

has anybody had success using a webview instead, particularly for local video files (bundled with app)? looping works well in html but i haven't been able to get it to play a local video inside the webview as a workaround.

is the p2 priority level still appropriate here? what does that mean exactly? will the flutter team be taking this on or up to community to put up a PR? thank you!

also, i dont think the above comment is off-topic, it is a workaround option since the behavior is not working correctly in the flutter package for 3+ years

@willsmanley Please see https://github.com/flutter/flutter/blob/master/docs/contributing/issue_hygiene/README.md#comments-providing-workarounds and https://github.com/flutter/flutter/blob/master/docs/contributing/issue_hygiene/README.md#priorities

i feel like i was keeping workaround discussion to a minimum. it doesnt say never discuss workarounds, just keep it to a minimum.
the fact is there is a small but noticeable delay when looping a video which has existed for 3 years and nobody seems to be actively working on it, so the next best solution in the meantime for someone who really needs a zero-delay experience is to use a webview since the browser-based video players seem to not have a noticeable delay while looping.
i'm very grateful for all contributors here working hard on this foss, but it seems unwelcoming for new developers to not be able to discuss workarounds in a 3+ year old issue thread.
thank you for providing link to p2 priority definition, it seems to be appropriate here.

i feel like i was keeping workaround discussion to a minimum. it doesnt say never discuss workarounds, just keep it to a minimum.

You were asking for help debugging a specific workaround; that's not going to be a minimal discussion. Please follow the guidance in the section I linked to.


feat(graph, tree): add the docs about Thumbnail

Thanks for your contribution. Is this PR for a new feature or a document fixing? Please describe in the PR. Thanks.


[AutoPR sql/resource-manager] Add new APIs (two List APIs) and update examples

Created to sync https://github.com/Azure/azure-rest-api-specs/pull/6640

This PR has been merged into https://github.com/Azure/azure-sdk-for-go/pull/5861