Open ijustkeepmoving opened 6 years ago
cache_file_path、cache_map_path、前面两个设置下路径,auto_save_map = 1、parse_cache_map=1就行
@jabinwang 谢谢,我试试
@jabinwang 感谢你能回答我。谢谢
刚才我试了,这样设置: mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "cache_file_path", “/storage/emulated/0/1”); mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "cache_map_path", “/storage/emulated/0/2”); mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "parse_cache_map", 1); mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "auto_save_map", 1);
这样设置无效,不知道是哪里没有对,cache_file_path、cache_map_path这2个路径都是指目录吗?
能不能贴一下你是如何设置的代码吗?万分感谢
@jabinwang 非常感谢,已经解决了,
代码如下:
mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "cache_file_path",“/storage/emulated/0/1.tmp");每首歌的临时文件名自己根据自己需要生成就行了。
mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "cache_map_path",“/storage/emulated/0/2.tmp"");//暂时不知道设置有什么用
mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "parse_cache_map",
1);
mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "auto_save_map", 1);
@ijustkeepmoving ,我这边测试arm64位会有问题,你那边会吗
@ijustkeepmoving 您好,我这播放的时候怎么报错呢? 05-02 14:23:49.592 31333-31427/tv.danmaku.ijk.media.example E/IJKMEDIA: Value -4234893962093002752.000000 for parameter 'async' is not a valid set of 32bit integer flags
我的ijkplayer 配置项:
05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: ===== versions ===== 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: ijkplayer : k0.8.4 05-02 14:23:49.590 31333-31425/tv.danmaku.ijk.media.example I/IJKMEDIA: SDL_RunThread: [31425] ff_msg_loop 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: FFmpeg : ff3.3--ijk0.8.0--20170829--001 05-02 14:23:49.590 31333-31425/tv.danmaku.ijk.media.example D/IJKMEDIA: message_loop 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: libavutil : 55.58.100 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: libavcodec : 57.89.100 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: libavformat : 57.71.100 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: libswscale : 4.6.100 05-02 14:23:49.590 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: libswresample: 2.7.100 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: ===== options ===== 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : framedrop = 1 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : start-on-prepared = 0 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : opensles = 0 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : overlay-format = 842225234 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: player-opts : mediacodec-all-videos = 1 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : ijkapplication = -970983920 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : ijkiomanager = -963346816 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : http-detect-range-support = 0 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : cache_file_path = /storage/emulated/0/1.tmp 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : cache_map_path = /storage/emulated/0/2.tmp 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : parse_cache_map = 1 05-02 14:23:49.591 31333-31333/tv.danmaku.ijk.media.example I/IJKMEDIA: format-opts : auto_save_map = 1
@harlanc 你这个问题我好像遇到过,不过忘记是什么原因导致的,你可以看看你的setOption是不是有问题,可以排除一下
使用默认protocol 时,设置URL前缀不支持 ijkio开头的,想问下这个 ijkio:cache:ffio是如何拼接在url上的?
这边会报
E/IJKMEDIA: Value -4404892375441211392.000000 for parameter 'async' is not a valid set of 32bit integer flags
Protocol 'ijkio' not on whitelist 'async,cache,crypto,file,http,https,ijkhttphook,ijkinject,ijklivehook,ijklongurl,ijksegment,ijktcphook,pipe,rtp,tcp,tls,udp,ijkurlhook,data'!
ijkio:cache:ffio:http://xxx.com/xxxx/xx/?musicId=ca5a7e15bedc4e: Invalid argument
没有加async这个
已经解决。感谢,,,
@52yaoer 你那边缓存很少部分的数据的时候,能不能正常播放缓存文件呢?比如刚播放5秒就断开网络,重新播放这个文件,会走缓存吗?
@ijustkeepmoving IjkMediaPlayer ijkMediaPlayer = (IjkMediaPlayer)mMediaPlayer; ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "cache_file_path", context.getCacheDir().getAbsolutePath() + "/media-preload/" + Utils.MD5(url) + ".tmp"); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "cache_map_path", context.getCacheDir().getAbsolutePath() + "/media-preload-map/" + Utils.MD5(url) + ".tmp"); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "parse_cache_map", 1); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "auto_save_map", 1); mMediaPlayer.setDataSource(context, Uri.parse("ijkio:cache:ffio:" + url)); 请问我这样设置了还是没有生成缓存文件,请问哪里设置错了? Couldn't open file on client side, trying server side
我的是可以的,,,,就是这样配置的。。
请问这样可以缓存m3u8的视频吗?
@52yaoer 我看了源码,小于200KB的缓存不会走,你可以试试呢
@ijustkeepmoving 在哪里看到小于200k不行
我设置了options, 但是在拼接url出问题,总是ijkio:rtmp://xxx: Operation not permitted
rtmp没办法用这个缓存哦吧。。
哪种格式可以支持ijkio协议的缓存呢?
哎 实在是搞不懂了 没人解答 文档又没有 换了腾讯云的播放器 杠杠的 不用ijk了
arm64位的会崩溃,这个有人解决了吗?
没遇到 换了腾云云播放器 没用这个了
@tanpuer 遇到了相同问题,请问你解决了?可否告知一下解决方式?
Value 4383941724.000000 for parameter '' is not a valid set of 32bit integer flags
ijkmp_prepare_async()=0 Value 4388593544.000000 for parameter '0\307B\325' out of range [2.1684e-314 - 3.88972e-314] Value 4383941724.000000 for parameter '' is not a valid set of 32bit integer flags option中设置cacheKey就会crash !求大神指点!
arm64位的会崩溃,这个有人解决了吗?
解决了吗?
无解~~~
debug一天也没定位原。之后我把 IJK与FFMpeg打包为两个静态库之后 再统一打包到一个动态库中就没有这问题了。
@ijustkeepmoving @litianying137 Hi, Is this for caching the streamed video+audio to a file so that if a different player is created with the same network url, we can find the cahced files and instead setDataSource the cached files? Is it working like that? Or is only caching for the lifetime of the IjkPlayer? is it persistent?
yes , its persistent,when file was cached ,you can find the file in cache_file_path.
@ijustkeepmoving Thanks for the reply,
So I use ijkMediaPlayer.setOption()
with these:
cache_file_path
cache_map_path
parse_cache_map
auto_save_map
I will be testing this now. Do I need to also add ijkio:cache:ffio:
before the URL? or is it not needed?
mediaPlayer.setDataSource("ijkio:cache:ffio:network_video_url");
sure,u need to set url with ijkio:cache:ffio as prefix
sure,u need to set url with ijkio:cache:ffio as prefix
Awesome, have you tried HLS with this caching? or is it only for mp4?
its not seems to support it~~
arm64位的会崩溃,这个有人解决了吗?
解决了吗?
AVClass的option字段必须设置为以NULL结尾的AVOptions静态数组。
这里的options遗漏了NULL尾元素导致了崩溃,补充上即可。https://github.com/bilibili/ijkplayer/blob/fb23b58b60fcff9e60c796a782c0b8114e2c5175/ijkmedia/ijkplayer/ijkavformat/ijkio.c#L112
arm64位的会崩溃,这个有人解决了吗?
解决了吗?
AVClass的option字段必须设置为以NULL结尾的AVOptions静态数组。
这里的options遗漏了NULL尾元素导致了崩溃,补充上即可。
验证了。 好使。
@zmobs @KingMTan 能分享一下编译好的库嘛,百度云或其它方式。万分感谢~~~
@jabinwang 非常感谢,已经解决了,
代码如下:
mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "cache_file_path",“/storage/emulated/0/1.tmp");每首歌的临时文件名自己根据自己需要生成就行了。 mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "cache_map_path",“/storage/emulated/0/2.tmp"");//暂时不知道设置有什么用 mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "parse_cache_map", 1); mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "auto_save_map", 1);
这就只是加个tmp后缀就行了??
在这个ISSUE 里面看到了用ijkio:cache:ffio可以实现缓存音频。 https://github.com/Bilibili/ijkplayer/issues/4069
但是还需要设置cache_file_path、cache_map_path、auto_save_map、parse_cache_map参数,
但是不知道这几个参数如何赋值,是通过setOption吗?能不能给出示例代码呢?谢谢了