- 博客(204)
- 收藏
- 关注
原创 @Transactional
后端对sql的调用不要进行crash捕获,否则会导致回滚失败。@Transactional 事务。外行人如何正确使用事务。
2024-05-15 08:36:57 273
原创 AVFilterLink的channels设置
我们通过上面代码可以知道link的channel来自于link->incfg.channel_layouts->channel_layouts[0]的转化。我们知道link的输入是link->src对应filter,那么这个配置也应该是src对应的filter进行配置。将相应的占位符进行替换后会发现channel_layouts取的是OutputFilter的是channel_layout字段。现在的问题就成了ost->enc_ctx->channels怎么来的?我们将相应占位符带入后发现其实找的是。
2024-05-09 09:44:35 467
原创 Bean的别名
我们可以看到对象实际上一个。这也就说明iOC容器目前所有的beanId对应bean只有一个实例。为Student1起了yuanxzh,yuanp,yuanjy三个别名。我们还可以通过下面的语句起别名。
2023-06-30 15:28:22 225
原创 idea创建maven项目遇到的坑
我认为是maven有问题,我mac也没有安装maven,那么我就开始安装maven。那么我们也下载3.8.1的版本,并配置阿里云镜像。根据这个文档说明是maven不匹配。根据如下文档进行安装与配置。
2023-06-28 10:47:36 962
原创 ijkplayer源码---倍速
我们看播放器都有倍速功能,倍速又是怎么实现的呢?public void setSpeed(float speed) { _setPropertyFloat(FFP_PROP_FLOAT_PLAYBACK_RATE, speed);}public float getSpeed(float speed) { return _getPropertyFloat(FFP_PROP_FLOAT_PLAYBACK_RATE, .0f);}{ "_setPropertyFloat",
2022-03-18 09:29:50 1441 1
原创 ijkplayer源码---音频播放
android的音频播放使用的是AudioTrack,如果要想看懂ijk的音频播放要对AudioTrack有个基础了解。大家可以看我写的android的音频播放文章AudioTrack使用_原总破局的博客-CSDN博客_audiotrackstatic int stream_component_open(FFPlayer *ffp, int stream_index){ switch (avctx->codec_type) { case AVMEDIA_TYPE_AU
2022-03-17 18:25:28 4966
原创 ijkplayer源码---buffer
1、什么时候开始缓冲?2、缓冲多少开始播放?1、什么时候开始缓冲呢?我们知道音视频的逻辑就是读到AVPacket,然后解码成AVFrame,最后进行display.那么缓存一定是对AVPacket进行处理。static int read_thread(void *arg){ …….if (is->audio_stream >= 0) { is->audioq.is_buffer_indicator = 1; is->buffer_indi
2022-03-15 14:13:07 978
原创 ijkplayer源码---enable_accurate_seek
这段代码费解,但是要用心读还是可以读懂的。先上流程图接下来我们上代码这段代码整体上就是af = frame_queue_peek_writable(&is->sampq)af->pts = (frame->pts == AV_NOPTS_VALUE) ? NAN : frame->pts * av_q2d(tb);af->pos = frame->pkt_pos;af->serial = is->auddec.pkt_se
2022-03-11 16:59:48 1075
原创 ijkplayer源码---seekTo
我们要进行音视频文件的seek操作,又是怎么做的呢?通过下面的流程图我们可以清晰的看到怎样进行的操作我们对ffp_seek_to_l进行分析int ffp_seek_to_l(FFPlayer *ffp, long msec){ assert(ffp); VideoState *is = ffp->is; int64_t start_time = 0; //转换成要跳转的时间基和总时长的事件基 msec /1000 * AV_TIME_B.
2022-03-11 11:04:26 887
原创 ijk版本信息打印
我们想知道在那里进行的打印可以从ffp_prepare_async_l中查找,里面记录了各种版本int ffp_prepare_async_l(FFPlayer *ffp, const char *file_name){ ffp_show_version_str(ffp, "ijkplayer", ijk_version_info()); ffp_show_version_str(ffp, "FFmpeg", av_version_info()); .
2022-03-10 10:59:59 251
原创 ijkplayer源码---FFPlayer结构体8
int last_error;最后出问题在了哪一步,比如read_thread设置为0int prepared;当前是否已经prepared了。设置为1的时候,同时发送ffp_notify_msg1(ffp, FFP_MSG_PREPARED);那么怎么才算prepared?read_thread对其进行了设置j进行了下面步骤就算准备好了avformat_open_inputffp_notify_msg1(ffp, FFP_MSG_OPEN_INPUT);FFP.
2022-03-09 15:19:21 221
原创 ijkplayer源码---FFPlayer结构体7
Uint32 overlay_format;我们搜索代码发现有两处赋值的地方inline static void ffp_reset_internal(FFPlayer *ffp){ ffp->overlay_format = SDL_FCC_RV32;}void ffp_set_overlay_format(FFPlayer *ffp, int chroma_fourcc){ switch (chroma_fourcc) {
2022-03-09 14:38:22 466
原创 ijkplayer源码---FFPlayer结构体6
struct IJKFF_Pipenode *node_vdec;struct IJKFF_Pipenode { SDL_mutex *mutex; void *opaque; void (*func_destroy) (IJKFF_Pipenode *node); int (*func_run_sync)(IJKFF_Pipenode *node); int (*func_flush) (IJKFF_Pipenode *node); // optio
2022-03-08 15:25:04 346
原创 ijkplayer--开启硬解码
我们在ff_ffplay_options.h中可以看到我们可以设置的选项 // Android only options { "mediacodec", "MediaCodec: enable H264 (deprecated by 'mediacodec-avc')", OPTION_OFFSET(mediacodec_avc), OPTION_INT(0, 0, 1) }, { "mediac
2022-03-08 14:30:13 4259
原创 ijkplayer源码---FFPlayer结构体5 IJKFF_Pipeline
struct IJKFF_Pipeline { SDL_Class *opaque_class; IJKFF_Pipeline_Opaque *opaque; void (*func_destroy) (IJKFF_Pipeline *pipeline);
2022-03-07 15:22:14 5390
原创 ijkplayer---引入多个播放器,ffmpeg的so库冲突
我现说我自己实验的结果分为两部分。so库的名字不一样,so库的函数名字一样,so库的函数中内容不一样。1、java层调用的so库,so库有jni文件。起作用的so库是我们最后调用system.loadLibrary引用的库。2、so库又调用了其他so库。这个要特别注意是我们第一次调用的system.loadLibrary加载的库。我们知道90%的播放器都引用的同样的ffmepg库,我们应该怎么办呢?1、最好使用共同的ffmpeg的so库2、尽早初始化我们自己的so库(但是这样
2022-03-05 21:43:33 1130
原创 ijkplayer---compile-ijk.sh分析
#! /usr/bin/env bash## Copyright (C) 2013-2014 Bilibili# Copyright (C) 2013-2014 Zhang Rui <bbcallen@gmail.com>## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License..
2022-03-05 21:33:56 3837
原创 ijkplayer源代码文章索引
ijkplayer源码---FFPlayer结构体1_qq_15255121的专栏-CSDN博客ijkplayer源码---FFPlayer结构体2_qq_15255121的专栏-CSDN博客ijkplayer源码---FFPlayer结构体3 SDL_Vout_qq_15255121的专栏-CSDN博客ijkplayer源码---FFPlayer结构体4 SDL_Aout_qq_15255121的专栏-CSDN博客...
2022-03-04 16:41:29 287
原创 ijkplayer--Protocol not found问题定位
在使用ijk播放一个mp4的时候,突然出现了一个错误what = -10000, error=0我们如何去定位这个错误呢?我们在IjkMediaPlayer类的public final class IjkMediaPlayer extends AbstractMediaPlayer {}public abstract class AbstractMediaPlayer implements IMediaPlayer { private OnErrorListener mOn
2022-03-04 15:52:52 3312
原创 ijkplayer源码---FFPlayer结构体4 SDL_Aout
ijkplayer源码---FFPlayer结构体1_qq_15255121的专栏-CSDN博客ijkplayer源码---FFPlayer结构体2_qq_15255121的专栏-CSDN博客ijkplayer源码---FFPlayer结构体3 SDL_Vout_qq_15255121的专栏-CSDN博客SDL_Aout *aout;aout是音频渲染aout在那里赋值呢? IjkPlayer.java@Overridepublic void prepareAsync() {.
2022-03-03 16:10:27 297
原创 ijkplayer源码---FFPlayer结构体3 SDL_Vout
SDL_Vout顾名思义应该和图像输出有关SDL_Vout *vout;我们看下vout那里进行的赋值IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*)){ 。。。。。。。 mp->ffplayer->vout = SDL_VoutAndroid_CreateForAndroidSurface(); if (!mp->ffplayer->vout) goto fai
2022-03-03 15:39:14 579
原创 ijkplayer源码---FFPlayer结构体2
ijkplayer源码---FFPlayer结构体1_qq_15255121的专栏-CSDN博客int seek_by_bytes;if (ffp->seek_by_bytes < 0) ffp->seek_by_bytes = !!(ic->iformat->flags & AVFMT_TS_DISCONT) && strcmp("ogg", ic->iformat->name);#define AVSEEK
2022-03-02 18:16:28 527
原创 ijkplayer源码---FFPlayer结构体1
我们知道FFPlayer是真正的内核typedef struct FFPlayer { const AVClass *av_class; /* ffplay context */ VideoState *is; /* format/codec options */ AVDictionary *format_opts; AVDictionary *codec_opts; AVDictionary *sws_dict; AVDiction
2022-03-01 18:09:48 601
原创 ijkplayer源码---IjkMediaPlayer结构体
ijkmedia/ijkplayer/ijkplayer_internal.h 这个头文件中包含一个结构体struct IjkMediaPlayer { volatile int ref_count; //应用当前对象的数目 pthread_mutex_t mutex; //线程锁,对IjkMediaPlayer的各种对象操作都要加锁 FFPlayer *ffplayer; //编解码相关真正的内核 int (*msg_loop)(void*); SDL_
2022-02-28 15:50:52 1498
原创 ijkplayer源码---IjkMediaPlayer之mNativeMediaPlayer
我们在看ijk的过程中会发现有这样一个函数static IjkMediaPlayer *jni_get_media_player(JNIEnv* env, jobject thiz){ pthread_mutex_lock(&g_clazz.mutex); IjkMediaPlayer *mp = (IjkMediaPlayer *) (intptr_t) J4AC_IjkMediaPlayer__mNativeMediaPlayer__get__catchAll(env,
2022-02-27 17:08:42 599
原创 ijkplayer源码---库的加载与初始化
IjkMediaPlayer.javapublic static void loadLibrariesOnce(IjkLibLoader libLoader) { synchronized (IjkMediaPlayer.class) { if (!mIsLibLoaded) { if (libLoader == null) libLoader = sLocalLibLoader; .
2022-02-26 20:34:02 995
原创 android studio引入ijkplayer二次开发
我们命令行打出的包是so库,无法直接debug,对于阅读代码已经修改不是很容易。我们今天把代码引入android studio。本文参考了如何将ijkplayer引入AS工程中进行二次开发_音视频开发进阶-CSDN博客编译成功ijk后我们打开ijk目录选择我们需要的cpu架构我们以ijkplayer-arm64为例1、修改android/ijkplayer/ijkplayer-arm64/build.gradleandroid { defaultConfig
2022-02-26 09:22:40 1674
原创 mac编译ijkplayer
先按照这个改linux编译ijkplayer(ubuntu)_qq_15255121的专栏-CSDN博客_ijkplayer linux编译编译ijk最奇葩的问题tools/do-compile-ffmpeg.sh: line 309: xxxxx Segmentation fault: 11 make clean告诉你是因为ndk版本出了问题大胆换成android-ndk-r12b...
2022-02-25 17:51:10 858 1
原创 ijkplayer源码---设置选项2
这篇文章我们看下java层设置了选项,底层是如何流转的。android的上层,有个接口文件android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IMediaPlayer.javaIMediaPlayer.java提供了ijk可以使用的操作与回调。看到里面对播放源地址的设置有3个函数 @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
2022-02-25 11:11:32 1732
原创 Proto DataStore-----JAVA
为了编译proto文件,引入protobuf插件1、项目build.gradle加入dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' }2、模块buid.gradle加入apply plugin: 'com.google.protobuf' protobuf { protoc { artifact = "com.google.protobuf:proto
2022-01-20 09:53:15 380
原创 Preferences DataStore------JAVA
DataStore | Android 开发者 | Android Developers本文做个demopublic class TestDataStore { private static TestDataStore instance; private RxDataStore<Preferences> dataStore; public static YshpDataStore getInstance() { if (instan...
2022-01-19 17:56:49 2323
原创 ijkplayer源码---设置选项
上一节我们说到 if (ffp->mediacodec_all_videos || ffp->mediacodec_avc || ffp->mediacodec_hevc || ffp->mediacodec_mpeg2)mediacodec_all_videos、 mediacodec_avc 、mediacodec_hevc、mediacodec_mpeg2在哪里设设置的。搜索整个ijk的代码没有找到上面变量的设置,但是却找到了static const.
2021-12-16 17:46:43 1504
原创 ijkplayer源码---选择软解码还是硬解码
一直有个疑问 ijk是如何选择硬解码还是软解码的?我们一步一步来探讨我们知道ijk打开流的函数是static int stream_component_open(FFPlayer *ffp, int stream_index){ ...... switch (avctx->codec_type) { case AVMEDIA_TYPE_AUDIO: ..... break; case AVMEDIA
2021-12-16 16:20:56 8268
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人