北仑建网站价格,做电商能赚钱吗,wordpress特定目录指定模版,鲜花网站前台数据库建设背景 博主主要是从事C语言开发#xff0c;因此本文着重强调FFMPEG部分#xff0c;关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装#xff0c;通过JNI方式完成对外提供JAVA接口。 1.目录结构
activities:包含了demo的所有…背景 博主主要是从事C语言开发因此本文着重强调FFMPEG部分关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装通过JNI方式完成对外提供JAVA接口。 1.目录结构
activities:包含了demo的所有activity;application:content:eventbus:fragments:services:widget:resAndrodManifest.xml 2.代码框架流程 IjkVideoView.java中调用IMediaPlayer类的方法;IjkMediaPlayer.java对IMediaPlayer的方法进行重写;ijkplayer_jni.c:通过JNINativeMethod做JAVA和C代码的映射;
3.OPT机制 可设置的opt_category有OPT_CATEGORY_FORMATOPT_CATEGORY_CODECOPT_CATEGORY_SWSOPT_CATEGORY_PLAYER ijkMediaPlayer.setOption函数设置的实质对应jni接口中的IjkMediaPlayer_setOption函数;
OPT_CATEGORY_CODEC 在options_table.h文件AVOption avcodec_options中定义了FFPLAYER对外提供的关于编解码参数相关的options选项; OPT_CATEGORY_PLAYER 在ff_ffplay_options.h文件AVOption ffp_context_options中定义了FFPLAYER对外提供的关于播放器的options选项; 3.1.底层选项
3.1.1.ffmpeg(ffplay.c)中的原生option
an禁止音频默认值0
vn禁止视频默认值0
nodisp禁止图形显示默认值0
volume设置播放启动后的音量范围0100默认值100
fast使能非规范兼容优化默认值0
loop设置播放次数范围INT_MININT_MAX默认值1
infbuf使能不要限制输入缓冲区大小对实时流有用默认值0
framedrop使能当CPU太慢时丢帧的功能默认值0
seek-at-start设置播放时seek位置范围0INT_MAX默认值0
subtitle使能解码字幕流默认值0
3.1.2.filter相关
af音频的filter类型是字符串
vf视频的filter类型是字符串
3.1.3.ijkplayer(ff_ffplay.c)中扩展的选项
max-fps设置最大的fps,当fps大于max-fps时将丢弃多余的帧范围-1121默认值31
overlay-format可设置的值为fcc-_es2fcc-i420fcc-yv12fcc-rv16fcc-rv24和fcc-rv32默认值fcc-rv32
start-on-prepared启用当准备好后自动播放的功能默认值1
video-pictq-size设置图片队列的最大的帧数范围316默认值3
max-buffer-size设置预读取的最大缓冲区范围015M默认值15M
min-frames设置停止预读取的最小帧数范围250000默认值50000
first-high-water-mark-ms设置第一次唤醒read_thread线程的时间(毫秒)范围1005000默认值100
next-high-water-mark-ms设置下一次唤醒read_thread线程的时间(毫秒)范围1005000默认值1000
last-high-water-mark-ms设置最后一次唤醒read_thread线程的时间(毫秒)范围1005000默认值5000
packet-buffering使能当失速时在读取到足够包前暂停输出默认值1
sync-av-start同步AV开始时间默认值1
iformat强制输入格式默认值NULL
no-time-adjust从媒体流中返回实时时间而不是调整时间
preset-5-1-center-mix-level:
enable-accurate-seek使能seek准确默认值0
skip-calc-frame-rate禁止帧率计算默认值0
get-frame-mode警告该选项只用于获取帧默认值0
3.2.安卓选项
mediacodec使能mediacode的硬解码h.264视频功能,默认值0
mediacodec-auto-rotate使能mediacode的自动选装功能,默认值0
mediacodec-all-videos使能mediacode硬解码所有视频功能,默认值0
mediacodec-avc使能mediacode硬解码h.264视频功能已过时,默认值0
mediacodec-hevc使能mediacode硬解码hevc视频功能,默认值0
mediacodec-mpeg2使能mediacode硬解码mpeg2视频功能,默认值0
mediacodec-mpeg4使能mediacode硬解码mpeg4视频功能,默认值0
mediacodec-handle-resolution-change使能mediacode自动处理分辨率更改功能,默认值0
opensles使能opensles功能音频,默认值0
soundtouch使能soundtouch功能音频,默认值0
mediacodec-sync使能使用mediacode时同步时使用msg_queue,默认值0
4.JNI代码分析 核心代码ff_ffplay.c和ffplay.c
_setDataSource将URL赋值给IjkMediaPlayer的data_source;将播放器状态修改为MP_STATE_INITIALIZED;_prepareAsync将播放器状态修改为MP_STATE_ASYNC_PREPARING;创建一个ff_msg_loop线程作用暂时不详;ffp_prepare_async_l中包含设置OPT和打开流stream_openstream_open函数创建视频刷新线程ff_vout 创建读取线程ff_read线程ff_read的入口函数read_thread:avformat_open_input打开流avformat_find_stream_info获取流的详细信息