GithubHelp home page GithubHelp logo

javernaut / whatthecodec Goto Github PK

View Code? Open in Web Editor NEW
72.0 5.0 15.0 116.51 MB

A sample app that uses FFmpeg's shared libraries

License: MIT License

Kotlin 98.74% Shell 0.56% Ruby 0.70%
android-ffmpeg cmake ffmpeg android ffmpeg-android

whatthecodec's Introduction

WhatTheCodec

Build Codacy Badge MIT license Android Weekly #378 Android Weekly #396

This app shows information about all media streams inside a video or audio files. It is available in these markets:

Get it on Google Play  Available at Amazon Appstore  Explore it on AppGallery

Screenshots

Screenshot

Technical overview

The main purpose of the app is to show how to use the output of ffmpeg-android-maker by using its wrapped version - MediaFile library.

Main features:

  • Single Activity with Jetpack Compose for the whole UI and Navigation
  • Dagger/Hilt for DI
  • DataStore for settings storing
  • Baseline and Startup profiles
  • Dependabot and Github Actions for automating some housekeeping, static analysis, release management
  • Fastlane for screenshots making

License

WhatTheCodec app's source code is available under the MIT license. See the LICENSE.txt file for more details.

whatthecodec's People

Contributors

dependabot[bot] avatar javernaut avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

whatthecodec's Issues

Library not found

java.lang.UnsatisfiedLinkError: dlopen failed: library "libswresample.so" not found

Can't build the project

Trying to run ./ffmpeg-android-maker.sh -dav1d and on step Building the component: libdav1d I'm getting the following error

rm: crossfile-x86.meson: No such file or directory
/Users/alex/proj/temp/WhatTheCodec/ffmpeg-android-maker/scripts/libdav1d/build.sh: line 33: build/x86: No such file or directory
/Users/alex/proj/temp/WhatTheCodec/ffmpeg-android-maker/scripts/libdav1d/build.sh: line 42: cd: build/x86: No such file or directory
/Users/alex/proj/temp/WhatTheCodec/ffmpeg-android-maker/scripts/libdav1d/build.sh: line 44: -j: command not found

This happens both on Windows and Mac.

Play video with it

Can this be used to play video and decoding video like mkv which is not natively supported by android i mean ffmpeg android maker sorry?

Don't limit file types by system

System usually can't detect some audio or video types, such as the .alac and .mpc files, and FFMpeg can play with alac encoded files.

Screenshot_20240407-020621

Unable to open from external storage (as file descriptor)?

On Pixel2, I have taken a few short videos. 5-10 seconds each.

Within PathUtil.getPath(), the URI is:
content://com.android.externalstorage.documents/document/primary%3ADCIM%2FCamera%2FVID_20200124_154910.mp4

the check for isExternalStorageDocument(uri) is True and the variable "String[] split" (line ~35) contains:

  • split[0]: primary
  • split[1]: DCIM/Camera/VID_20200124_154910.mp4

getPath() then returns: /storage/emulated/0/DCIM/Camera/VID_20200124_154910.mp4

Finally, the C++ code fails within media_file_build():
media_file_builder.cpp:149 invokes onError(jMediaFileBuilder).

So, effectively, every video file I attempt to open uses the pipe interface. I am missing something or is this an issue with the newer (well, new-ish) phones running Android 10?

Thank you for the otherwise awesome repo and the ffmpeg builder.

cannot get the library from Maven

Hi.
I get the following error x 7 times.
Do I have to put the user login and password for github.com? If so, how please?

K-MIn

Execution failed for task ':app:checkAmazonDebugAarMetadata'.

Could not resolve all files for configuration ':app:amazonDebugRuntimeClasspath'.
Could not resolve com.javernaut.mediafile:mediafile:1.0.0.
Required by:
project :app
> Could not resolve com.javernaut.mediafile:mediafile:1.0.0.
> Could not get resource 'https://maven.pkg.github.com/Javernaut/MediaFile/com/javernaut/mediafile/mediafile/1.0.0/mediafile-1.0.0.pom'.
> Could not GET 'https://maven.pkg.github.com/Javernaut/MediaFile/com/javernaut/mediafile/mediafile/1.0.0/mediafile-1.0.0.pom'. Received status code 400 from server: Bad Request

Android API 29 uses msf: prefix for downloaded files uri id?

On an emulated Pixel2 API 29, WhatTheCodec fails to open mp4s in Downloads.
Seems like the uri looks like "content://com.android.providers.downloads.documents/document/msf:24"
and the "msf:" is not needed.
So PathUtil.java needs something like:

38                } else if (id.startsWith("msf:")) {
39                    final String[] split = id.split(":");
40                    uri = ContentUris.withAppendedId(
41                            Uri.parse("content://downloads/public_downloads"), Long.valueOf(split[1]));

The logcat follows:

com.javernaut.whatthecodec E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.javernaut.whatthecodec, PID: 13131
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=42, result=-1, data=Intent { dat=content://com.android.providers.downloads.documents/document/msf:24 flg=0x1 }} to activity {com.javernaut.whatthecodec/com.javernaut.whatthecodec.MainActivity}: java.lang.NumberFormatException: For input string: "msf:24"
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.NumberFormatException: For input string: "msf:24"
        at java.lang.Long.parseLong(Long.java:594)
        at java.lang.Long.valueOf(Long.java:808)
        at com.javernaut.whatthecodec.PathUtil.getPath(PathUtil.java:40)
        at com.javernaut.whatthecodec.MainActivity.tryGetVideoConfig(MainActivity.kt:108)
        at com.javernaut.whatthecodec.MainActivity.onActivityResult(MainActivity.kt:39)
        at android.app.Activity.dispatchActivityResult(Activity.java:8110)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4838)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

Couldn't open video

patherror
if (avformat_open_input(&pFormatCtx, filePath, nullptr, 0,nullptr) != 0) {
__android_log_print(ANDROID_LOG_INFO, APPNAME, "%s", filePath);
return env->NewStringUTF("Couldn't Open file");
}

This condition is always true,why?

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

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

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.