自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(285)
  • 资源 (4)
  • 收藏
  • 关注

原创 FFMPEG解析ts流

关于TS格式解析,可以参考《》,本文主要代码部分解读。建议大家熟读iso13818-1,碰到问题很多情况是因为没有熟悉标准。

2024-01-26 16:34:01 1528

原创 关于ffplay源码之serial变量的说明

serial翻译为连续的,在ffplay中是用于判断播放是否连续的标志,serial变量存在于自定义的多个结构体中。也就是在seek后serial会加1,会产生变化。以下为read_thread中,文件发生跳到时的操作。

2024-01-25 17:06:18 385

原创 ffmpeg本地TS和M3U8播放流程及调试过程

本地TS播放过程本地M3U8播放过程

2024-01-24 11:02:36 874

原创 播放卡顿分析

看下这个M3U8请求,时间间隔超过duration的时长。ts的duration是11S。

2023-05-06 14:02:43 215

原创 文件分割指令

split -b 50M *.log -d -a 3

2023-04-28 18:05:29 147

原创 关于P2P资料整理

FlashP2P协议分析及应用

2023-04-28 11:40:21 158

原创 高频卡顿问题分析

从监控图中可以看到,3.76k的用户,两分钟内报卡顿次数达到100万次,很恐怖,这个是非正常的卡顿由于没有日志,只能先看代码分析,出现高频卡顿的原因问题描述在播放过程,会频繁上报卡顿,2分钟能报几百次,从报卡顿开始到卡顿结束最短时间接近0ms数据分析最近30天的数据分析出现概率比较高的6个频道如下:出现概率比较高的用户如下: Buffer次数 设备数 备注 大于100k ...

2023-01-31 19:46:24 596

原创 修复ijkplayer没有正确处理sps导致的MediaCodec解码失败问题

这里针对这种情况做了处理,提取出其中的sps数据给到MediaCodec,避免MediaCodec初始化失败。需要这种视频链接的,我可以发出来,不过视频链接只有24小时有效。

2022-10-04 01:04:28 1299

原创 Android 硬解情况下 sps/pps变化时重启解码器继续播放

【代码】Android 硬解情况下 sps/pps变化时重启解码器继续播放。

2022-10-04 00:51:18 630

原创 如何用ijkplayer使用改变清晰度功能(切换码流)

自适应码率切换需要服务器端和客户端同时支持,首先服务器端需要提供多码率的码流,对HLS来说,就是需要服务器端提供master m3u8 playlist,也就是通常所说的嵌套m3u8;对Dash来说,manifest文件AdaptationSet里面会包含多个Representation,每个Representation对应某一个码率的流的描述。3.Buffer数据切换。

2022-10-04 00:21:52 1671 1

原创 seek缩略图

HIVideoView2: | onSeekPreviewInfoReady seekPreviewInfo= SeekPreviewInfo{urlList=[https://r1.ykimg.com/0524000861D55D630000011AC2072E4C-00001.jpg, https://r1.ykimg.com/0524000861D55D630000011AC2072E4C-00002.jpg, https://r1.ykimg.com/0524000861D55D630000011

2022-07-05 19:44:16 122

翻译 在onDrawFrame中调用GLES20会导致长时间延迟(GLES20 calls in onDrawFrame causes long delay)

我编写了一个游戏,当调用onDrawFrame()时,我首先更新游戏状态(游戏逻辑和绘图缓冲区),然后继续进行实际绘图。 在Moto G和Nexus 7上,一切都运行顺畅,每个onDrawFrame()调用只需要1-5ms。 但是,在三星Galaxy S3上,90%的时间onDrawFrame()调用需要30-50ms才能更新。进一步研究这个问题我发现问题完全取决于我在下面附加的第一个渲染方法: - (编辑:块现在是glclear();删除了不必要的调用以获取句柄,请参阅注释)public vo.

2022-05-25 10:22:41 297

原创 播放器各个阶段耗时分析点

共耗时1.34秒,其中网络耗时在380+ms13:48:32.226 起播13:48:32.246~13:48:32.386 访问m3u8耗时140ms13:48:32.386~13:48:32.626 访问第一个ts 耗时240ms13:48:32.996~13:48:33.006 解析码流耗时10ms13:48:33.006~13:48:33.056 释放上一次的资源耗时50ms13:48:33.056~13:48:33.066 创建vdec 耗时10ms13:48:33.0

2022-05-16 11:33:51 507

原创 弱引用避免Handler内存泄漏的例子

文件名:JiangxiLivePlayerWrapper.java1、Handler定义2、handler申请3、handler调用

2022-04-29 10:39:43 1553

原创 通过日志对内存泄漏的检查

1、am_low_memory2、am_proc_died3、在这之前内存达到过 640m --》且 测试场景 在 mv 播放页面,猜测有 native 泄露03-08 14:00:16.271 3480 3520 I am_pss :[22754,10015,com.jamdeo.tv.vod,642356224,257843200,377698304]4、死于GL error: Out of memory!03-08 13:18:04.799 2295 2725 E...

2022-03-16 15:19:55 1346

原创 记录APP崩溃分析过程

这次没有ANR,所以先分析日志1、第一次报错的地方通过这个日志,可以看到这个进程为77212、在aosp_bugreport文件里搜索77213、然后在tombstones可以看到是由于null pointer dereference引起的...

2022-03-08 15:35:22 206

原创 ffmpeg常用指令

切片MP4生成m3u8列表命令ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8此转换命令默认的每片(即一个ts文件)时长是2s,m3u8列表文件中默认只保存最后的5条片信息,也就是播放器在拉流时只能播最后的那5条ts视频文件。这肯定不是你想要的,那么幸运的是ffmpeg提供了更改这些相关设置的参数,如下:相关设置参数:hls_time seconds’Set the segment .

2021-12-22 14:43:21 549

原创 关于HLS的discontinue出现问题

1、apple 的hls方案,采用ffmpeg转码的ts流,播放时会渐渐变得音画不同步,sohu源的处理办法是每隔5分钟加一次discontinue标签,但是这个标签会导致原生播放器重启,表现得有点卡。解决办法:针对这种情况,改造播放器,不让重启,直接读取下一个流是比较好的办法。但是ffmpeg处理hls的播放存在其它一些问题:1、每遇到discontinue时,显示的播放时长会清零;2、只能在第一个discontinue前进行拖放。本文针对这个问题,对ffmpeg进行改造,使对hls源更优雅的适配。

2021-09-16 16:55:30 1387

原创 ffmpeg下HLS解析过程

HLS (HTTP Live Streaming)是Apple的动态码率。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。它的工作原理是将一个大的媒体文件进行分片,将该分片文件资源路径记录于 m3u8 文件(即 playlist)内。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

2021-09-16 09:20:29 161

原创 TS文件格式详解及解封装过程

简要ts是一种封装格式,全名为MPEG-TS,文件分为三层:ts层(Transport Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层是在pes层上加入了数据流识别和传输的必要信息(header)。相关概念PAT:Program Association Table,节目关联表PMT:Program Map Table,节目映射表E

2021-09-06 17:35:52 7607

原创 ijkplayer调用三方so库

ijkplayer\android\ijkplayer\ijkplayer-armv7a\src\main\jni\prtengine\Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := libyourlib-libLOCAL_SRC_FILES := libyourlib-lib.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclu

2021-08-19 10:38:40 348

原创 ffmpeg调用三方SO库

ijkplayer\android\contrib\tools\do-compile-ffmpeg.shFF_EXTRA_CFLAGS=$FF_SOURCE/prtengine/include/FF_EXTRA_LDFLAGS=$FF_SOURCE/prtengine/lib/libyour-lib.soFF_DEP_LIBS=

2021-08-19 09:42:56 181

原创 ijkplayer的seek过程

IjkVideoView.javaseekTo(seekToPosition);ijkplayer_jni.c{ "seekTo", "(J)V", (void *) IjkMediaPlayer_seekTo },int ijkmp_seek_to_l(IjkMediaPlayer *mp, long msec)ffp_notify_msg2(mp->ffplayer, FFP_REQ_SEEK, (int)msec);

2021-08-11 14:02:54 990

原创 关于mediacode编解码绿屏的汇总

https://blog.csdn.net/email_jade/article/details/82527278ijkplayer起播绿屏问题记录Android平台使用ijkplayer播放mp4的时候出现了起播闪一下绿屏的现象,在github上寻找解决方案,很多答案都是说由于开启硬解并且视频第一帧不是关键帧导致的,如下: https://github.com/Bilibili/ijkplayer/issues/3233 但是我的配置是软解,也出现了同样的现象。后来...

2021-08-11 13:35:52 1999

原创 shell脚本发送按键控制android设备

#!/bin/bashinput keyevent 20;#向下键input keyevent 20;#向下键input keyevent 20;#向下键input keyevent 19;#向上键input keyevent 19;#向上键input keyevent 19;#向上键input keyevent 19;#向上键dumpsys meminfo com.mm.droid.live.express;#打印进程内存信息input keyevent 4;#返回键input k.

2021-08-04 13:24:05 491 1

原创 ios多个framework相互调用

2021-07-22 14:37:30 561 1

原创 不同平台获取MAC地址

static int getMacAddress(char *addr){#ifdef _WIN32#elif __APPLE__#include <TargetConditionals.h>#if TARGET_IPHONE_SIMULATOR sprintf(addr, "ios_simulator");#elif TARGET_OS_IPHONE sprintf(addr, "iphone");#elif TARGET_OS_MAC FILE *f.

2021-06-29 15:41:08 174

原创 ffmpeg的avformat_find_stream_info分析过程(十一)

/* 读取媒体文件的包来获取流信息。这个方法对于没有头部的文件格式也是有用的,例如MPEG。 * 对于MPEG-2这种帧模型重复的类型,这个方法也会计算真实帧率。 * * 该逻辑文件地址不被这个方法更改。 * 检查的数据包可能会被缓冲以用于以后处理。 * * @参数 ic 媒体文件句柄(格式上下文) * @参数 options ... * @成功返回值大于0 * @注意:这个方法不保证打开所有的编解码器,所以非空的options参数将会返回一个完全合理的行为。 * * 为了让用户.

2021-06-10 17:21:16 791

原创 关于MediaCoder使用过程问题整理

1、MediaCoder压出来的视频都会莫名其妙带一个标签2种解决办法1)关了播放器的章节功能,2)容器里不要自动选择,选启用→MP4BOX。2、使用MP4BOX混流画面直接黑屏mp4box 混流hevc视频出现黑屏问题是因为混流器版本太旧了,有bug,作者也懒得更新,要修复这个问题,去mp4box的官网,下载最新版本构建的程序替换到mc的coder或tools目录就行https://juejin.cn/post/6854573210579501070这个黑屏是由于tag引起的

2021-06-07 13:46:16 1146 2

原创 ffmpeg的avformat_open_input()分析过程--以mp4为例(十)

avformat_open_input(),该函数用于打开多媒体数据并且获取一些信息,它的声明位于libavformat/avformat.h。主要工作1)通过init_input打开流媒体数据,根据probe探测流媒体最合适的协议类型AVInputFormat2)read_header即根据对应的协议,读取媒体头信息并创建AVStream......

2021-05-18 19:09:09 1268 1

原创 ffmpeg的avformat_alloc_context()分析过程(九)

avformat_alloc_context这个函数主要实现了分配一个AVFormatContext。他可用于由框架分配的在上下文和所有内容,即分配解复用器上下文AVFormatContext *avformat_alloc_context(void){ AVFormatContext *ic; ic = av_malloc(sizeof(AVFormatContext)); if (!ic) return ic; avformat_get_context_defa.

2021-05-14 14:36:40 896 2

转载 FFRMPEG4.1源码分析之 io_open_default() && io_close_default()

目录1io_open_default()1.1ffio_open_whitelist()1.1.1ffurl_open_whitelist()1.1.1.1 ffurl_alloc()1.1.1.1.1url_find_protocol()1.1.1.1.1.1ffurl_get_protocols()...

2021-05-14 14:30:30 361

原创 ijkplayer及ffmpeg重要概念及结构体(八)

ijkplayer中的结构体介绍IjkMediaPlayerijkplayer 的结构体,提供播放控制和播放的状态的一些处理,结构体指针再初始化后会保存在java层,提供复用。基本每个jni的方法都会获取java 层对应对象的一个long 型变量,然后强转成此结构体。FFPlayer主要与java层交互的结构体,音视频的输出,软硬解码器的设置。VideoStateFFPlay中的结构体。ijkplayer 直接拿过来包含在FFPlayer中。Frame_Queue保存解码后数

2021-05-14 11:27:44 693

原创 ijkplayer添加私有协议(六)

ffbuild\config.mak(这文件是自动生成,不用修改)CONFIG_IJKBUFFERDATASOURCE_PROTOCOL=yeslibavformat\protocols.cextern const URLProtocol ff_ijkbufferdatasource_protocol;libavformat/ijkutils.cIJK_DUMMY_PROTOCOL(ijkbufferdatasource);libavformat\protocol_list.c

2021-05-06 15:46:14 638 1

原创 ijkplayer的MP4解析---读取多媒体数据文件头(七)

总概ff_ffplay.cread_thread ---.>>>avformat_open_inpututils.cavformat_open_input --->>>s->iformat->read_header(s)mov.c.read_header=mov_read_header,mov_read_header -->>>>mov_read_default1、...

2021-04-30 15:46:44 860

原创 ijkplayer切换视频/声道 (五)

简介本文介绍ijkplayer播放器针对一个视频源切换声道的原理及实现方法,其实这个方法也能切换视频通道准备工作文件首先准备两个视频文件工具MKVToolnix制作通过MKVToolnix把两个视频文件混流程一个视频文件混合好后,就得到了后缀名为mkv的文件代码实现获取视频track信息ijkplayer本身有个方法getTrackInfo可以获取到视频的track信息,返回的值是IjkTrackInfo[],其内部具体实现public IjkTra

2021-01-20 09:40:56 2156 1

原创 gradle配置 uploadArchives上传文件到私服仓库

简要 很多时候,Android Studio中所创建的工程,会依赖一个或多个Module。Module 生成的AAR库,可以上传到maven或者私服Nexus作为公用的SDK。Gradle子工程之间通过compile/implementation project(":XXX")这种方式依赖是非常便利的,但是这样的时候,如果用uploadArchives上传AAR到Maven,就可以通过api引用,很是方便。配置及编译配置分播放器部分配置和App引用配置ijkplayer配置及...

2021-01-18 14:31:20 8136

原创 video_refresh_thread分析 (四)

简介《ijkplayer解码器的准备过程(二)》这篇文章中,讲述了video_refresh_thread创建过程,这边文章主要分析video_refresh_thread的执行过程。故名思议,这个线程主要负责视频渲染过程,流程图代码分析1、video_refresh_thread循环调用video_refresh,只要满足不是暂停!is->paused和force刷新force_refreshstatic int video_refresh_thread(vo.

2021-01-07 13:35:43 503 1

原创 ijkplayer的read_thread线程分析(三)

read_thread线程read_thread:这个线程先进行FFmpeg初始化操作,然后获取视频流信息avformat_open_input():打开媒体。avformat_find_stream_info():获得媒体信息。这个函数有时候会影响首画的时间,看这个函数的源码发现:这个函数会一直分析视频流的信息,当一直获取不到信息的时候就会一直在这个函数中,一直到它最大的限制,才会出来,会有好几秒的时间。如果网络卡的话,时间会更长。但是我们可以自己给他添加限制,到达我们自己的限制

2020-12-24 11:28:09 784

原创 ijkplayer解码器的准备过程(二)

本文介绍,从设置好DataSource的URL后,到onPrepared回调的过程 ijkMediaPlayer.setDataSource("http://192.168.199.8/emo.mp4"); ts = System.currentTimeMillis(); ijkMediaPlayer.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() { .

2020-11-20 17:48:59 1098

eclipse没有Log.rar

android 8.0 在eclipse没有Log,及DDMS中打开File Explorer选项卡后没有显示文件列表可以尝试更新 android-sdk-windows\tools\lib\eclipse

2020-07-11

aidl_clien_server.zip

AIDL使用样例,包括Activity内的使用样例,还有跨进程的测试样例,即Client和Server都包括

2019-11-21

demo_for_anr.rar

ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框.基于AS的

2019-11-20

Launcher3循环效果.rar

桌面循环的Launcher3,包括修改前后的代码都有,方便对比,比如现在有5屛,当屏幕向右滑动的时候,当mCurrentScreen=4(下标从0开始)时,继续往右滑动,这个时候需要判断该桌面是否需要循环,如果需要循环需要对代码做特殊处理,详细见代码

2019-11-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除