Cache support for any video player with help of single line

Related tags

Media android video cache
Overview

Video cache support for Android

Android Arsenal Build Status Download

Table of Content

Why AndroidVideoCache?

Because there is no sense to download video a lot of times while streaming! AndroidVideoCache allows to add caching support to your VideoView/MediaPlayer, ExoPlayer or any another player with help of single line!

Features

  • caching to disk during streaming;
  • offline work with cached resources;
  • partial loading;
  • cache limits (max cache size, max files count);
  • multiple clients for same url.

Note AndroidVideoCache works only with direct urls to media file, it doesn't support any streaming technology like DASH, SmoothStreaming, HLS.

Get started

Just add dependency (AndroidVideoCache is available in jcenter):

dependencies {
    compile 'com.danikula:videocache:2.7.1'
}

and use url from proxy instead of original url for adding caching:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    HttpProxyCacheServer proxy = getProxy();
    String proxyUrl = proxy.getProxyUrl(VIDEO_URL);
    videoView.setVideoPath(proxyUrl);
}

private HttpProxyCacheServer getProxy() {
    // should return single instance of HttpProxyCacheServer shared for whole app.
}

To guarantee normal work you should use single instance of HttpProxyCacheServer for whole app. For example you can store shared proxy in your Application:

public class App extends Application {

    private HttpProxyCacheServer proxy;

    public static HttpProxyCacheServer getProxy(Context context) {
        App app = (App) context.getApplicationContext();
        return app.proxy == null ? (app.proxy = app.newProxy()) : app.proxy;
    }

    private HttpProxyCacheServer newProxy() {
        return new HttpProxyCacheServer(this);
    }
}

or use simple factory. More preferable way is use some dependency injector like Dagger.

Recipes

Disk cache limit

By default HttpProxyCacheServer uses 512Mb for caching files. You can change this value:

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .maxCacheSize(1024 * 1024 * 1024)       // 1 Gb for cache
            .build();
}

or can limit total count of files in cache:

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .maxCacheFilesCount(20)
            .build();
}

or even implement your own DiskUsage strategy:

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .diskUsage(new MyCoolDiskUsageStrategy())
            .build();
}

Listen caching progress

Use HttpProxyCacheServer.registerCacheListener(CacheListener listener) method to set listener with callback onCacheAvailable(File cacheFile, String url, int percentsAvailable) to be aware of caching progress. Do not forget to to unsubscribe listener with help of HttpProxyCacheServer.unregisterCacheListener(CacheListener listener) method to avoid memory leaks.

Use HttpProxyCacheServer.isCached(String url) method to check was url's content fully cached to file or not.

See sample app for more details.

Providing names for cached files

By default AndroidVideoCache uses MD5 of video url as file name. But in some cases url is not stable and it can contain some generated parts (e.g. session token). In this case caching mechanism will be broken. To fix it you have to provide own FileNameGenerator:

public class MyFileNameGenerator implements FileNameGenerator {

    // Urls contain mutable parts (parameter 'sessionToken') and stable video's id (parameter 'videoId').
    // e. g. http://example.com?videoId=abcqaz&sessionToken=xyz987
    public String generate(String url) {
        Uri uri = Uri.parse(url);
        String videoId = uri.getQueryParameter("videoId");
        return videoId + ".mp4";
    }
}

...
HttpProxyCacheServer proxy = HttpProxyCacheServer.Builder(context)
    .fileNameGenerator(new MyFileNameGenerator())
    .build()

Adding custom http headers

You can add custom headers to requests with help of HeadersInjector:

public class UserAgentHeadersInjector implements HeaderInjector {

    @Override
    public Map<String, String> addHeaders(String url) {
        return Maps.newHashMap("User-Agent", "Cool app v1.1");
    }
}

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .headerInjector(new UserAgentHeadersInjector())
            .build();
}

Using exoPlayer

You can use exoPlayer with AndroidVideoCache. See sample app in exoPlayer branch. Note exoPlayer supports cache as well.

Sample

See sample app.

Known problems

  • In some cases clients can't connect to local proxy server ('Error pinging server' error). May be it is result of previous error. Note in this case video will be played, but without caching.

Whats new

See Release Notes here

Code contributions

If it's a feature that you think would need to be discussed please open an issue first, otherwise, you can follow this process:

  1. Fork the project
  2. Create a feature branch (git checkout -b my_branch)
  3. Fix a problem. Your code must contain test for reproducing problem. Your tests must be passed with help of your fix
  4. Push your changes to your new branch (git push origin my_branch)
  5. Initiate a pull request on github
  6. Rebase master branch if your local branch is not actual. Merging is not acceptable, only rebase
  7. Your pull request will be reviewed and hopefully merged :)

Where published?

Here

Questions?

[email protected]

License

Copyright 2014-2017 Alexey Danilov

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Error pinging server

    Error pinging server

    In some cases local server cache proxy is not pinged. One known problem is system proxy in connection's settings (wi-fi or apn). May be some another reasons exist. Typical stacktrace is

    
    E/Pinger: Error reading ping response
              com.danikula.videocache.ProxyCacheException: Error opening connection for http://127.0.0.1:52645/ping with offset 0
                  at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:75)
                  at com.danikula.videocache.Pinger.pingServer(Pinger.java:86)
                  at com.danikula.videocache.Pinger.access$100(Pinger.java:28)
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:108)
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:104)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                  at java.lang.Thread.run(Thread.java:818)
               Caused by: java.io.FileNotFoundException: http://127.0.0.1:52645/ping
                  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
                  at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:70)
                  at com.danikula.videocache.Pinger.pingServer(Pinger.java:86) 
                  at com.danikula.videocache.Pinger.access$100(Pinger.java:28) 
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:108) 
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:104) 
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                  at java.lang.Thread.run(Thread.java:818) 
    E/Pinger: Error reading ping response
              com.danikula.videocache.ProxyCacheException: Error opening connection for http://127.0.0.1:52645/ping with offset 0
                  at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:75)
                  at com.danikula.videocache.Pinger.pingServer(Pinger.java:86)
                  at com.danikula.videocache.Pinger.access$100(Pinger.java:28)
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:108)
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:104)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                  at java.lang.Thread.run(Thread.java:818)
               Caused by: java.io.FileNotFoundException: http://127.0.0.1:52645/ping
                  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
                  at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:70)
                  at com.danikula.videocache.Pinger.pingServer(Pinger.java:86) 
                  at com.danikula.videocache.Pinger.access$100(Pinger.java:28) 
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:108) 
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:104) 
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                  at java.lang.Thread.run(Thread.java:818) 
    E/Pinger: Error reading ping response
              com.danikula.videocache.ProxyCacheException: Error opening connection for http://127.0.0.1:52645/ping with offset 0
                  at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:75)
                  at com.danikula.videocache.Pinger.pingServer(Pinger.java:86)
                  at com.danikula.videocache.Pinger.access$100(Pinger.java:28)
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:108)
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:104)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                  at java.lang.Thread.run(Thread.java:818)
               Caused by: java.io.FileNotFoundException: http://127.0.0.1:52645/ping
                  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
                  at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:70)
                  at com.danikula.videocache.Pinger.pingServer(Pinger.java:86) 
                  at com.danikula.videocache.Pinger.access$100(Pinger.java:28) 
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:108) 
                  at com.danikula.videocache.Pinger$PingCallable.call(Pinger.java:104) 
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                  at java.lang.Thread.run(Thread.java:818) 
    E/Pinger: Error pinging server (attempts: 3, max timeout: 280). If you see this message, please, email me [email protected] or create issue here https://github.com/danikula/AndroidVideoCache/issues
              com.danikula.videocache.ProxyCacheException: Error pinging server (attempts: 3, max timeout: 280). If you see this message, please, email me [email protected] or create issue here https://github.com/danikula/AndroidVideoCache/issues
                  at com.danikula.videocache.Pinger.ping(Pinger.java:67)
                  at com.danikula.videocache.HttpProxyCacheServer.isAlive(HttpProxyCacheServer.java:182)
                  at com.danikula.videocache.HttpProxyCacheServer.getProxyUrl(HttpProxyCacheServer.java:119)
                  at com.danikula.videocache.HttpProxyCacheServer.getProxyUrl(HttpProxyCacheServer.java:100)
                  at com.danikula.videocache.sample.VideoFragment.startVideo(VideoFragment.java:59)
                  at com.danikula.videocache.sample.VideoFragment.afterViewInjected(VideoFragment.java:44)
                  at com.danikula.videocache.sample.VideoFragment_.onViewChanged(VideoFragment_.java:107)
                  at org.androidannotations.api.view.OnViewChangedNotifier.notifyViewChanged(OnViewChangedNotifier.java:41)
                  at com.danikula.videocache.sample.VideoFragment_.onViewCreated(VideoFragment_.java:72)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1097)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259)
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624)
                  at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)
                  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
                  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)
                  at android.app.Activity.performStart(Activity.java:6268)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                  at android.app.ActivityThread.-wrap11(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    
    bug 
    opened by danikula 67
  • Streaming while caching

    Streaming while caching

    Caching work great and thank you for this lib, but it doesn't seem to stream (playing) while caching. It looks like it wait for caching to be available at 100% and only then start to play the video. (Which is longer than just stream in via URL and start playing the first chunks available).

    Is it normal behavior or is it a malformed code I've wrote ?

    HttpProxyCacheServer proxy = VideoProxyFactory.getProxy(this);
            proxy.registerCacheListener(new CacheListener() {
                @Override
                public void onCacheAvailable(File cacheFile, String url, int percentsAvailable) {
                    if(percentsAvailable<100)
                    {
                        mPercentageOfVideo.setText(percentsAvailable+"%");
                        mPercentageOfVideo.setVisibility(View.VISIBLE);
                    }
                    else
                    {
                        mPercentageOfVideo.setText("100%");
                        mVideoSharePath=cacheFile.getAbsolutePath();
                    }
                }
            }, mVideoUrl);
            mVideoUrl = proxy.getProxyUrl(mVideoUrl);
    
    bug 
    opened by eshkoliGilad 15
  • Implement a DiskLruCache that monitors the space used

    Implement a DiskLruCache that monitors the space used

    As stated in getExternalCacheDir()'s documentation, the platform usually doesn't clean the external cache directory automatically. Thus, something like a DiskLruCache where you could specify the maximum size that you want the cache to store would be very useful. JakeWharton's DiskLruCache could be a very good starting point for this.

    enhancement 
    opened by eduardb 12
  • Cache HLS, Dash or SmoothStreaming?

    Cache HLS, Dash or SmoothStreaming?

    Hello, I was wondering if I can implement your library to cache HLS videos. Since it is written in the description that it can add caching support to ExoPlayer, I wanted to know if it was possible. thanks!

    question 
    opened by nano92 11
  • allow user to create and implement custom DiskCache

    allow user to create and implement custom DiskCache

    Hi,

    I really just wanted to create a pull request for my first commit - 5248c5c0f9f9783236cf3f091e09fe754dcec61d

    I want to define a max cache size but also remove any cached files older than X. I ended up creating a simple class that extends LruDiskUsage.

    The second commit was just to use the latest build tools which Android Studio was nagging me to do.

    Anyway, let me know if any questions

    thanks! joe

    enhancement 
    opened by jpage4500 10
  • Exception at com.android.okio.Util.checkOffsetAndCount (Util.java:29)

    Exception at com.android.okio.Util.checkOffsetAndCount (Util.java:29)

    Got this from a user

    Fatal Exception: java.lang.ArrayIndexOutOfBoundsException
    com.android.okio.Util.checkOffsetAndCount (Util.java:29)
    com.android.okhttp.internal.http.HttpURLConnectionImpl.disconnect (HttpURLConnectionImpl.java:113)
    com.danikula.videocache.HttpUrlSource.close (HttpUrlSource.java:80)
    com.danikula.videocache.ProxyCache.closeSource (ProxyCache.java:160)
    com.danikula.videocache.ProxyCache.readSource (ProxyCache.java:141)
    com.danikula.videocache.ProxyCache.access$100 (ProxyCache.java:19)
    com.danikula.videocache.ProxyCache$SourceReaderRunnable.run (ProxyCache.java:179)
    java.lang.Thread.run (Thread.java:818)
    
    bug 
    opened by gouravd 10
  • Can't work in Farsi。

    Can't work in Farsi。

    We test it fail when user choose the system language to Farsi.

    Need modify the code and add Locale.US for String.format function :

    private String newResponseHeaders(GetRequest request) throws IOException, ProxyCacheException {
        String mime = source.getMime();
        boolean mimeKnown = !TextUtils.isEmpty(mime);
        int length = cache.isCompleted() ? cache.available() : source.length();
        boolean lengthKnown = length >= 0;
        long contentLength = request.partial ? length - request.rangeOffset : length;
        boolean addRange = lengthKnown && request.partial;
        return new StringBuilder()
                .append(request.partial ? "HTTP/1.1 206 PARTIAL CONTENT\n" : "HTTP/1.1 200 OK\n")
                .append("Accept-Ranges: bytes\n")
                .append(lengthKnown ? String.format(Locale.US, "Content-Length: %d\n", contentLength) : "")
                .append(addRange ? String.format(Locale.US, "Content-Range: bytes %d-%d/%d\n", request.rangeOffset, length - 1, length) : "")
                .append(mimeKnown ? String.format(Locale.US, "Content-Type: %s\n", mime) : "")
                .append("\n") // headers end
                .toString();
    }
    
    bug 
    opened by SjAndy88 9
  • Error closing socket output stream

    Error closing socket output stream

    10-12 14:15:34.731 26482-2536/com.mango.englishtalent E/HttpProxyCacheServer: HttpProxyCacheServer error
    com.danikula.videocache.ProxyCacheException: Error closing socket output stream
    at com.danikula.videocache.HttpProxyCacheServer.closeSocketOutput(HttpProxyCacheServer.java:294)
    at com.danikula.videocache.HttpProxyCacheServer.releaseSocket(HttpProxyCacheServer.java:270)
    at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:242)
    at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:52)
    at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:337)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
    Caused by: java.net.SocketException: shutdown failed: ENOTCONN (Transport endpoint is not connected)
    at java.net.PlainSocketImpl.shutdownOutput(PlainSocketImpl.java:373)
    at java.net.Socket.shutdownOutput(Socket.java:654)
    at com.danikula.videocache.HttpProxyCacheServer.closeSocketOutput(HttpProxyCacheServer.java:291)
    at com.danikula.videocache.HttpProxyCacheServer.releaseSocket(HttpProxyCacheServer.java:270) 
    at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:242) 
    at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:52) 
    at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:337) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 
    Caused by: android.system.ErrnoException: shutdown failed: ENOTCONN (Transport endpoint is not connected)
    at libcore.io.Posix.shutdown(Native Method)
    at libcore.io.ForwardingOs.shutdown(ForwardingOs.java:159)
    at java.net.PlainSocketImpl.shutdownOutput(PlainSocketImpl.java:371)
    at java.net.Socket.shutdownOutput(Socket.java:654) 
    at com.danikula.videocache.HttpProxyCacheServer.closeSocketOutput(HttpProxyCacheServer.java:291) 
    at com.danikula.videocache.HttpProxyCacheServer.releaseSocket(HttpProxyCacheServer.java:270) 
    at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:242) 
    at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:52) 
    at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:337) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 
    
    enhancement 
    opened by zhangchf 8
  • Pinging server error when set up System Http Proxy.

    Pinging server error when set up System Http Proxy.

    Pinging server error when set up System Http Proxy.

    Error pinging server [attempt: 0, timeout: 200]. 
    at java.util.concurrent.TimeoutException
    at com.danikula.videocache.HttpProxyCacheServer.makeSureServerWorks
    

    And It will work when add "127.0.0.1" to bypass list.

    http-proxy

    bug 
    opened by ongakuer 8
  • Better offline cache checking, prefetch url to cache and set source compatability

    Better offline cache checking, prefetch url to cache and set source compatability

    If the cache is completed exit early and don't compare file sizes from the server for true offline cache. Was running into situations where there was no connectivity, wifi or cellular data, and the library still tries to check the length of the file on the server. If the cache is already marked completed we should exit early and use the cached file.

    Since I forgot to make a separate branch for this pull request some of the other stuff I did is in here too. Added a function to prefetch a url into cache without having to start it up in a VideoView or media player. Since I'm using Java8 for RetroLambda the library needed source compatibility set since Java8 was throwing errors building it.

    opened by jarrodholliday 7
  • Error pinging server

    Error pinging server

    Hi, i am getting the following ex;

    10-18 15:41:08.993  22772-22772/com.android.** I/ProxyCache﹕ Proxy cache server started. Ping it...
    10-18 15:41:08.997  22772-22900/com.android.** D/ProxyCache﹕ Open connection  to http://127.0.0.1:55999/ping
    10-18 15:41:09.198  22772-22772/com.android.** E/ProxyCache﹕ Error pinging server [attempt: 0, timeout: 200].
        java.util.concurrent.TimeoutException
                at java.util.concurrent.FutureTask.get(FutureTask.java:176)
                at com.danikula.videocache.HttpProxyCacheServer.makeSureServerWorks(HttpProxyCacheServer.java:87)
                at com.danikula.videocache.HttpProxyCacheServer.<init>(HttpProxyCacheServer.java:73)
                at com.android.**.code.AApplication.newProxy(AApplication.java:45)
                at com.android.**.code.AApplication.getProxy(AApplication.java:40)
                at com.android.**.code.activity.Splash.getNextAd(Splash.java:118)
                at com.android.**.code.activity.Splash.access$000(Splash.java:44)
                at com.android.**.code.activity.Splash$1.onSuccess(Splash.java:91)
                at com.android.**.code.activity.Splash$1.onSuccess(Splash.java:83)
                at com.android.**.code.retrofit.RetrofitCallback.success(RetrofitCallback.java:87)
                at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
                at android.os.Handler.handleCallback(Handler.java:739)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5254)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    

    What does it mean? how can i solve this problem? Thank yoouuu.

    bug 
    opened by anilustel 7
  • 播放苹果手机b站客户端直播视频的dlna投屏链接出现error

    播放苹果手机b站客户端直播视频的dlna投屏链接出现error

    当url设置为苹果手机b站客户端直播视频的dlna投屏的链接后,出现了error,具体log如下: D/IJKMEDIA: IjkMediaPlayer_native_init D/IJKMEDIA: IjkMediaPlayer_native_setup I/IJKMEDIA: av_version_info: 97349ff2 I/IJKMEDIA: ijk_version_info: 97349ff2 D/IJKMEDIA: ffpipeline_create_from_android() D/IJKMEDIA: ijkmp_set_inject_opaque(0x29a2) D/IJKMEDIA: ijkmp_set_inject_opaque()=void D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque(0x29a2) D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque()=void D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback() D/IJKMEDIA: ffpipeline_set_mediacodec_select_callback D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback()=void D/IJKMEDIA: IjkMediaPlayer_setOptionLong D/IJKMEDIA: IjkMediaPlayer_setOption D/IJKMEDIA: IjkMediaPlayer_setOption D/IJKMEDIA: IjkMediaPlayer_setOptionLong D/IJKMEDIA: IjkMediaPlayer_setOptionLong D/IJKMEDIA: IjkMediaPlayer_reset D/IJKMEDIA: IjkMediaPlayer_release D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0) D/IJKMEDIA: ffpipeline_set_surface() D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0)=void D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void D/IJKMEDIA: IjkMediaPlayer_native_setup I/IJKMEDIA: av_version_info: 97349ff2 I/IJKMEDIA: ijk_version_info: 97349ff2 D/IJKMEDIA: ffpipeline_create_from_android() D/IJKMEDIA: ijkmp_set_inject_opaque(0x29fa) D/IJKMEDIA: ijkmp_set_inject_opaque()=void D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque(0x29fa) D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque()=void D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback() D/IJKMEDIA: ffpipeline_set_mediacodec_select_callback D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback()=void D/IJKMEDIA: ijkmp_dec_ref(): ref=0 D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void I/Pinger: Ping response: ping ok, pinged? true I/HttpProxyCacheServer: Proxy cache server started. Is it alive? true I/Pinger: Ping response: ping ok, pinged? true D/IJKMEDIA: IjkMediaPlayer_setDataSourceAndHeaders V/IJKMEDIA: setDataSource: path http://127.0.0.1:43433/http%3A%2F%2F119.84.174.8%2Flive-bvc%2F151195%2Flive_28552103_12565112_1500.flv%3Fexpires%3D1669370899%26pt%3Dios%26deadline%3D1669370899%26len%3D0%26oi%3D1901585047%26platform%3Dios%26qn%3D64%26trid%3D1000c6be16fe30ac4229a22734051e5d0862%26uipk%3D100%26uipv%3D100%26nbs%3D1%26uparams%3Dcdn%2Cdeadline%2Clen%2Coi%2Cplatform%2Cqn%2Ctrid%2Cuipk%2Cuipv%2Cnbs%26cdn%3Dcn-gotcha01%26upsig%3Da3d76969de4923f17897df218b0dd9dc%26sk%3D1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f%26p2p_type%3D8192%26src%3D57345%26sl%3D2%26free_type%3D0%26sid%3Dcn-cq-ct-01-07%26chash%3D1%26sche%3Dban%26score%3D7%26usgroup%3Deg%26pp%3Dsrt%26machinezone%3Dylf%26source%3Donetier%26site%3Dc80af6381fa993ea2aca07260e96ede1%26order%3D1%26bili_room_id%3D24780388%26_nva_ext_%3D D/IJKMEDIA: ijkmp_set_data_source(url="http://127.0.0.1:43433/http%3A%2F%2F119.84.174.8%2Flive-bvc%2F151195%2Flive_28552103_12565112_1500.flv%3Fexpires%3D1669370899%26pt%3Dios%26deadline%3D1669370899%26len%3D0%26oi%3D1901585047%26platform%3Dios%26qn%3D64%26trid%3D1000c6be16fe30ac4229a22734051e5d0862%26uipk%3D100%26uipv%3D100%26nbs%3D1%26uparams%3Dcdn%2Cdeadline%2Clen%2Coi%2Cplatform%2Cqn%2Ctrid%2Cuipk%2Cuipv%2Cnbs%26cdn%3Dcn-gotcha01%26upsig%3Da3d76969de4923f17897df218b0dd9dc%26sk%3D1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f%26p2p_type%3D8192%26src%3D57345%26sl%3D2%26free_type%3D0%26sid%3Dcn-cq-ct-01-07%26chash%3D1%26sche%3Dban%26score%3D7%26usgroup%3Deg%26pp%3Dsrt%26machinezone%3Dylf%26source%3Donetier%26site%3Dc80af6381fa993ea2aca07260e96ede1%26order%3D1%26bili_room_id%3D24780388%26_nva_ext_%3D") D/IJKMEDIA: ijkmp_set_data_source(url="http://127.0.0.1:43433/http%3A%2F%2F119.84.174.8%2Flive-bvc%2F151195%2Flive_28552103_12565112_1500.flv%3Fexpires%3D1669370899%26pt%3Dios%26deadline%3D1669370899%26len%3D0%26oi%3D1901585047%26platform%3Dios%26qn%3D64%26trid%3D1000c6be16fe30ac4229a22734051e5d0862%26uipk%3D100%26uipv%3D100%26nbs%3D1%26uparams%3Dcdn%2Cdeadline%2Clen%2Coi%2Cplatform%2Cqn%2Ctrid%2Cuipk%2Cuipv%2Cnbs%26cdn%3Dcn-gotcha01%26upsig%3Da3d76969de4923f17897df218b0dd9dc%26sk%3D1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f%26p2p_type%3D8192%26src%3D57345%26sl%3D2%26free_type%3D0%26sid%3Dcn-cq-ct-01-07%26chash%3D1%26sche%3Dban%26score%3D7%26usgroup%3Deg%26pp%3Dsrt%26machinezone%3Dylf%26source%3Donetier%26site%3Dc80af6381fa993ea2aca07260e96ede1%26order%3D1%26bili_room_id%3D24780388%26_nva_ext_%3D")=0 D/IJKMEDIA: IjkMediaPlayer_setVideoSurface D/IJKMEDIA: ijkmp_set_android_surface(surface=0xffd29120) D/IJKMEDIA: ffpipeline_set_surface() D/IJKMEDIA: ijkmp_set_android_surface(surface=0xffd29120)=void D/IJKMEDIA: IjkMediaPlayer_setOptionLong D/IJKMEDIA: IjkMediaPlayer_setOptionLong D/IJKMEDIA: IjkMediaPlayer_prepareAsync D/IJKMEDIA: ijkmp_prepare_async() I/IJKMEDIA: ===== versions ===== I/IJKMEDIA: ijkplayer : 97349ff2 I/IJKMEDIA: FFmpeg : 97349ff2 I/IJKMEDIA: libavutil : 55.78.100 I/IJKMEDIA: libavcodec : 57.107.100 I/IJKMEDIA: libavformat : 57.83.100 I/IJKMEDIA: libswscale : 4.8.100 I/IJKMEDIA: libswresample: 2.9.100 I/IJKMEDIA: ===== options ===== I/IJKMEDIA: player-opts : framedrop = 10 I/IJKMEDIA: player-opts : enable-accurate-seek = 1 I/IJKMEDIA: player-opts : soundtouch = 1 I/IJKMEDIA: format-opts : ijkapplication = -155507376 I/IJKMEDIA: format-opts : ijkiomanager = -956212096 I/IJKMEDIA: =================== D/IJKMEDIA: ijkmp_prepare_async()=0 I/IJKMEDIA: SDL_RunThread: [13887] ff_msg_loop D/IJKMEDIA: message_loop D/IJKMEDIA: FFP_MSG_FLUSH: I/IJKMEDIA: SDL_RunThread: [13888] ff_vout I/IJKMEDIA: SDL_RunThread: [13889] ff_read I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 1 I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 131073 I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 131074

    E/HttpUrlSource: Error fetching info from http://119.84.174.8/live-bvc/151195/live_28552103_12565112_1500.flv?expires=1669370899&pt=ios&deadline=1669370899&len=0&oi=1901585047&platform=ios&qn=64&trid=1000c6be16fe30ac4229a22734051e5d0862&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=a3d76969de4923f17897df218b0dd9dc&sk=1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f&p2p_type=8192&src=57345&sl=2&free_type=0&sid=cn-cq-ct-01-07&chash=1&sche=ban&score=7&usgroup=eg&pp=srt&machinezone=ylf&source=onetier&site=c80af6381fa993ea2aca07260e96ede1&order=1&bili_room_id=24780388&nva_ext= java.io.FileNotFoundException: http://119.84.174.8/live-bvc/151195/live_28552103_12565112_1500.flv?expires=1669370899&pt=ios&deadline=1669370899&len=0&oi=1901585047&platform=ios&qn=64&trid=1000c6be16fe30ac4229a22734051e5d0862&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=a3d76969de4923f17897df218b0dd9dc&sk=1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f&p2p_type=8192&src=57345&sl=2&free_type=0&sid=cn-cq-ct-01-07&chash=1&sche=ban&score=7&usgroup=eg&pp=srt&machinezone=ylf&source=onetier&site=c80af6381fa993ea2aca07260e96ede1&order=1&bili_room_id=24780388&nva_ext= at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255) at com.danikula.videocache.HttpUrlSource.fetchContentInfo(HttpUrlSource.java:141) at com.danikula.videocache.HttpUrlSource.length(HttpUrlSource.java:70) at com.danikula.videocache.HttpProxyCache.newResponseHeaders(HttpProxyCache.java:62) at com.danikula.videocache.HttpProxyCache.processRequest(HttpProxyCache.java:40) at com.danikula.videocache.HttpProxyCacheServerClients.processRequest(HttpProxyCacheServerClients.java:42) at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:236) at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:54) at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:340) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919)

    E/HttpUrlSource: Error fetching info from http://119.84.174.8/live-bvc/151195/live_28552103_12565112_1500.flv?expires=1669370899&pt=ios&deadline=1669370899&len=0&oi=1901585047&platform=ios&qn=64&trid=1000c6be16fe30ac4229a22734051e5d0862&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=a3d76969de4923f17897df218b0dd9dc&sk=1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f&p2p_type=8192&src=57345&sl=2&free_type=0&sid=cn-cq-ct-01-07&chash=1&sche=ban&score=7&usgroup=eg&pp=srt&machinezone=ylf&source=onetier&site=c80af6381fa993ea2aca07260e96ede1&order=1&bili_room_id=24780388&nva_ext= java.io.FileNotFoundException: http://119.84.174.8/live-bvc/151195/live_28552103_12565112_1500.flv?expires=1669370899&pt=ios&deadline=1669370899&len=0&oi=1901585047&platform=ios&qn=64&trid=1000c6be16fe30ac4229a22734051e5d0862&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=a3d76969de4923f17897df218b0dd9dc&sk=1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f&p2p_type=8192&src=57345&sl=2&free_type=0&sid=cn-cq-ct-01-07&chash=1&sche=ban&score=7&usgroup=eg&pp=srt&machinezone=ylf&source=onetier&site=c80af6381fa993ea2aca07260e96ede1&order=1&bili_room_id=24780388&nva_ext= at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255) at com.danikula.videocache.HttpUrlSource.fetchContentInfo(HttpUrlSource.java:141) at com.danikula.videocache.HttpUrlSource.length(HttpUrlSource.java:70) at com.danikula.videocache.HttpProxyCache.isUseCache(HttpProxyCache.java:52) at com.danikula.videocache.HttpProxyCache.processRequest(HttpProxyCache.java:44) at com.danikula.videocache.HttpProxyCacheServerClients.processRequest(HttpProxyCacheServerClients.java:42) at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:236) at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:54) at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:340) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) E/ProxyCache: ProxyCache error com.danikula.videocache.ProxyCacheException: Error opening connection for http://119.84.174.8/live-bvc/151195/live_28552103_12565112_1500.flv?expires=1669370899&pt=ios&deadline=1669370899&len=0&oi=1901585047&platform=ios&qn=64&trid=1000c6be16fe30ac4229a22734051e5d0862&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=a3d76969de4923f17897df218b0dd9dc&sk=1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f&p2p_type=8192&src=57345&sl=2&free_type=0&sid=cn-cq-ct-01-07&chash=1&sche=ban&score=7&usgroup=eg&pp=srt&machinezone=ylf&source=onetier&site=c80af6381fa993ea2aca07260e96ede1&order=1&bili_room_id=24780388&nva_ext= with offset 0. Version: 2.7.1 at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:85) at com.danikula.videocache.ProxyCache.readSource(ProxyCache.java:123) at com.danikula.videocache.ProxyCache.access$100(ProxyCache.java:19) at com.danikula.videocache.ProxyCache$SourceReaderRunnable.run(ProxyCache.java:187) at java.lang.Thread.run(Thread.java:919) Caused by: java.io.FileNotFoundException: http://119.84.174.8/live-bvc/151195/live_28552103_12565112_1500.flv?expires=1669370899&pt=ios&deadline=1669370899&len=0&oi=1901585047&platform=ios&qn=64&trid=1000c6be16fe30ac4229a22734051e5d0862&uipk=100&uipv=100&nbs=1&uparams=cdn,deadline,len,oi,platform,qn,trid,uipk,uipv,nbs&cdn=cn-gotcha01&upsig=a3d76969de4923f17897df218b0dd9dc&sk=1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f&p2p_type=8192&src=57345&sl=2&free_type=0&sid=cn-cq-ct-01-07&chash=1&sche=ban&score=7&usgroup=eg&pp=srt&machinezone=ylf&source=onetier&site=c80af6381fa993ea2aca07260e96ede1&order=1&bili_room_id=24780388&nva_ext= at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255) at com.danikula.videocache.HttpUrlSource.open(HttpUrlSource.java:80) at com.danikula.videocache.ProxyCache.readSource(ProxyCache.java:123)  at com.danikula.videocache.ProxyCache.access$100(ProxyCache.java:19)  at com.danikula.videocache.ProxyCache$SourceReaderRunnable.run(ProxyCache.java:187)  at java.lang.Thread.run(Thread.java:919)  E/HttpProxyCacheServer: HttpProxyCacheServer error com.danikula.videocache.ProxyCacheException: Error processing request. Version: 2.7.1 at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:243) at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:54) at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:340) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) Caused by: com.danikula.videocache.ProxyCacheException: Error reading source 1 times. Version: 2.7.1 at com.danikula.videocache.ProxyCache.checkReadSourceErrorsCount(ProxyCache.java:59) at com.danikula.videocache.ProxyCache.read(ProxyCache.java:45) at com.danikula.videocache.HttpProxyCache.responseWithCache(HttpProxyCache.java:79) at com.danikula.videocache.HttpProxyCache.processRequest(HttpProxyCache.java:45) at com.danikula.videocache.HttpProxyCacheServerClients.processRequest(HttpProxyCacheServerClients.java:42) at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:236) at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:54)  at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:340)  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)  at java.util.concurrent.FutureTask.run(FutureTask.java:266)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:919)  I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 2 E/IJKMEDIA: http://127.0.0.1:43433/http%3A%2F%2F119.84.174.8%2Flive-bvc%2F151195%2Flive_28552103_12565112_1500.flv%3Fexpires%3D1669370899%26pt%3Dios%26deadline%3D1669370899%26len%3D0%26oi%3D1901585047%26platform%3Dios%26qn%3D64%26trid%3D1000c6be16fe30ac4229a22734051e5d0862%26uipk%3D100%26uipv%3D100%26nbs%3D1%26uparams%3Dcdn%2Cdeadline%2Clen%2Coi%2Cplatform%2Cqn%2Ctrid%2Cuipk%2Cuipv%2Cnbs%26cdn%3Dcn-gotcha01%26upsig%3Da3d76969de4923f17897df218b0dd9dc%26sk%3D1304f646dfeb4df8b6e7ff33c167d3ad899b33eab284038eff41ce83ae9a8a1f%26p2p_type%3D8192%26src%3D57345%26sl%3D2%26free_type%3D0%26sid%3Dcn-cq-ct-01-07%26chash%3D1%26sche%3Dban%26score%3D7%26usgroup%3Deg%26pp%3Dsrt%26machinezone%3Dylf%26source%3Donetier%26site%3Dc80af6381fa993ea2aca07260e96ede1%26order%3D1%26bili_room_id%3D24780388%26_nva_ext_%3D: End of file D/IJKMEDIA: FFP_MSG_ERROR: 0 I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [13889] E/tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0) D/IJKMEDIA: IjkMediaPlayer_reset D/IJKMEDIA: IjkMediaPlayer_release D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0) D/IJKMEDIA: ffpipeline_set_surface() D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0)=void D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: message_loop exit I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [13887] I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [13888] D/IJKMEDIA: ijkmp_shutdown_l()=void D/IJKMEDIA: IjkMediaPlayer_native_setup I/IJKMEDIA: av_version_info: 97349ff2 I/IJKMEDIA: ijk_version_info: 97349ff2 D/IJKMEDIA: ffpipeline_create_from_android() D/IJKMEDIA: ijkmp_set_inject_opaque(0x2a02) D/IJKMEDIA: ijkmp_set_inject_opaque()=void D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque(0x2a02) D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque()=void D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback() D/IJKMEDIA: ffpipeline_set_mediacodec_select_callback D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback()=void D/IJKMEDIA: ijkmp_dec_ref(): ref=0 D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void

    D/IJKMEDIA: IjkMediaPlayer_reset D/IJKMEDIA: IjkMediaPlayer_release D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0) D/IJKMEDIA: ffpipeline_set_surface() D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0)=void D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void D/IJKMEDIA: IjkMediaPlayer_native_setup I/IJKMEDIA: av_version_info: 97349ff2 I/IJKMEDIA: ijk_version_info: 97349ff2 D/IJKMEDIA: ffpipeline_create_from_android() D/IJKMEDIA: ijkmp_set_inject_opaque(0x2a42) D/IJKMEDIA: ijkmp_set_inject_opaque()=void D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque(0x2a42) D/IJKMEDIA: ijkmp_set_ijkio_inject_opaque()=void D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback() D/IJKMEDIA: ffpipeline_set_mediacodec_select_callback D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback()=void D/IJKMEDIA: ijkmp_dec_ref(): ref=0 D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void D/IJKMEDIA: IjkMediaPlayer_release D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0) D/IJKMEDIA: ffpipeline_set_surface() D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0)=void D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void D/IJKMEDIA: ijkmp_dec_ref(): ref=0 D/IJKMEDIA: ijkmp_shutdown_l() D/IJKMEDIA: ijkmp_shutdown_l()=void

    这个问题是使用苹果手机的b站直播视频的dlna投屏的链接才会出现,而且是有的直播视频会有的不会。 请问该如何解决?

    opened by unnoPlayer 2
  • Is it possible to move the library to the mavenCentral repository?

    Is it possible to move the library to the mavenCentral repository?

    Since jCenter has been left in a read-only repository, I would like to be able to continue using this great library. And I wanted to know if it could be uploaded to the maven central repository. thank you very much, best regards @danikula

    opened by AlejandroImbox 5
  • Error Pinging Server

    Error Pinging Server

    I am leaving my issue here as told in Logcat. Please tell me the valid solution as I have already tried to add android:usesCleartextTraffic="true" , and android:networkSecurityConfig="@xml/network_config" in manifest file, but still facing same crashing issue. I am facing below error: If you see this message, please, report at https://github.com/danikula/AndroidVideoCache/issues/134. Default proxies are: [DIRECT] com.danikula.videocache.ProxyCacheException: Error pinging server (attempts: 3, max timeout: 280). If you see this message, please, report at https://github.com/danikula/AndroidVideoCache/issues/134. Default proxies are: [DIRECT]. Version: 2.7.1 at com.danikula.videocache.Pinger.ping(Pinger.java:73) at com.danikula.videocache.HttpProxyCacheServer.isAlive(HttpProxyCacheServer.java:185) at com.danikula.videocache.HttpProxyCacheServer.getProxyUrl(HttpProxyCacheServer.java:122) at com.danikula.videocache.HttpProxyCacheServer.getProxyUrl(HttpProxyCacheServer.java:103) at com.musicApp.raask.utils.CacheUtil.prefetchContents(CacheUtil.java:23) at com.musicApp.raask.utils.CacheUtil.lambda$prefetchOrTimeout$1(CacheUtil.java:35) at com.musicApp.raask.utils.-$$Lambda$CacheUtil$9G0FsUaR3XsEHFV5ICLOI-UGRXI.run(Unknown Source:4)

    opened by bhumikash-tech 2
Releases(2.7.1)
Owner
Alexey Danilov
Alexey Danilov
android video player base on ijkplayer

GiraffePlayer NOTE:this project is no longer update please using improved GiraffePlayer2 ,for flutter please visit GPlayer out of the box android vide

tom 683 Nov 14, 2022
Android MoveNet single human pose estimation by ncnn

Android MoveNet single human pose estimation by ncnn

FeiGeChuanShu 93 Dec 31, 2022
Android Java wrapper around ffmpeg command line binary

FFMPEG Library for Android This project is a Java wrapper around an ffmpeg command line binary for use in Android applications. It depends on the andr

Guardian Project 555 Dec 5, 2022
MJPEG video streaming on Android

ipcam-view Android MJPEG video streaming made simple! A wrapper library around the well known SimpleMjpegView and android-camera-axis projects. If you

null 359 Jan 6, 2023
Convert video to GIF. Simple and fast.

Convert video to GIF. Simple and fast.

tasy5kg 24 Nov 26, 2022
AndroidPhotoFilters aims to provide fast, powerful and flexible image processing instrument for creating awesome effects on any image media.

PhotoFiltersSDK PhotoFiltersSDK aims to provide fast, powerful and flexible image processing instrument for creating awesome effects on any image medi

Zomato 2.5k Dec 30, 2022
script(s) to build ffmpeg for android, including support for RTMP (and OpenSSL)

android-ffmpeg-with-rtmp This repository contains script(s) to build ffmpeg for android with RTMP (and OpenSSL) support. Instructions Install the Andr

cine.io 234 Dec 28, 2022
Cache support for any video player with help of single line

Video cache support for Android Table of Content Why AndroidVideoCache? Features Get started Recipes Disk cache limit Listen caching progress Providin

Alexey Danilov 5.1k Dec 26, 2022
Yet Another Video Player (or YAVP) is a Video Player for Android that is based on Googles ExoPlayer.

Yet Another Video Player Yet Another Video Player (or YAVP) is a Video Player for Android that is based on Googles ExoPlayer. Who Is YAVP For? First o

null 62 Dec 29, 2022
Compose-video-player - Video player for Android Compose powered by ExoPlayer

Compose Video Player Video player for Android Compose powered by ExoPlayer. Addi

Juan Pablo Herrera 22 Dec 13, 2022
Minesweeper is a single-player puzzle video game

Minesweeper Minesweeper is a single-player puzzle video game. The objective of the game is to clear a rectangular board

ADITYA RAJ 1 Jun 26, 2022
Terminal Game. Black and White have only pawns. White wins if their pawn moved to 8th line. Black wins if their pawn moves to 1st line. If black or white haven't any move, then no one wins(stalemate))

Only-Pawns-Chess Terminal game for 2 players Regular chess but all sides have only pawns Rules This game extend all the rules of regular chess but it

Pavel Levchenko 0 Nov 23, 2021
Fermata Media Player is a free, open source audio and video player with a simple and intuitive interface.

Fermata Media Player About Fermata Media Player is a free, open source audio and video player with a simple and intuitive interface. It is focused on

Andrey 227 Jan 6, 2023
A simple Android utils library to write any type of data into cache files and read them later.

CacheUtilsLibrary This is a simple Android utils library to write any type of data into cache files and then read them later, using Gson to serialize

Wesley Lin 134 Nov 25, 2022
Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.

ijkplayer Platform Build Status Android iOS Video player based on ffplay Download Android: Gradle # required allprojects { repositories {

bilibili 31k Jan 3, 2023
Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.

ijkplayer Platform Build Status Android iOS Video player based on ffplay Download Android: Gradle # required allprojects { repositories {

bilibili 28.9k May 26, 2021
Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.

ijkplayer Platform Build Status Android iOS Video player based on ffplay Download Android: Gradle # required allprojects { repositories {

bilibili 29.8k Dec 22, 2021
Progress Button is a android library for hanling different types state like active, finished, enabled, disabled and reset with a single line of code.

Progress Button is a android library for hanling different types state like active, finished, enabled, disabled and reset with a single line of code.

Sagar Khurana 38 Nov 15, 2022