自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(204)
  • 收藏
  • 关注

原创 @Transactional

后端对sql的调用不要进行crash捕获,否则会导致回滚失败。@Transactional 事务。外行人如何正确使用事务。

2024-05-15 08:36:57 233

原创 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 406

原创 Bean的别名

我们可以看到对象实际上一个。这也就说明iOC容器目前所有的beanId对应bean只有一个实例。为Student1起了yuanxzh,yuanp,yuanjy三个别名。我们还可以通过下面的语句起别名。

2023-06-30 15:28:22 165

原创 Bean的实例化

spring bean的实例化

2023-06-30 15:10:58 290

原创 第一个spring程序

spring hello world

2023-06-30 11:18:14 535

原创 idea创建maven项目遇到的坑

我认为是maven有问题,我mac也没有安装maven,那么我就开始安装maven。那么我们也下载3.8.1的版本,并配置阿里云镜像。根据这个文档说明是maven不匹配。根据如下文档进行安装与配置。

2023-06-28 10:47:36 739

原创 Leanback(1)-播放控制栏下添加新的行

TV开发 leanback

2023-04-27 15:42:37 960 1

原创 Mac系统配置

Mac配置环境变量

2022-11-15 11:25:32 220

原创 Android model应用aar-2

model引入aar

2022-09-14 13:13:36 532

原创 Android model应用aar

model引用aar

2022-09-14 12:54:46 822

原创 音频相关问题

音频、pcm、ffmpeg

2022-08-26 23:49:39 729

原创 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 1150 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 4845

原创 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 796

原创 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 956

原创 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 789

原创 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 200

原创 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 151

原创 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 294

原创 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 315

原创 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 3736

原创 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 5270

原创 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 1060

原创 ijkplayer---compile-ijk.sh分析

#! /usr/bin/env bash## Copyright (C) 2013-2014 Bilibili# Copyright (C) 2013-2014 Zhang Rui <[email protected]>## 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 3782

原创 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 258

原创 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 3060

原创 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 244

原创 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 514

原创 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 484

原创 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 511

原创 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 1433

原创 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 531

原创 ijkplayer源码---库的加载与初始化

IjkMediaPlayer.javapublic static void loadLibrariesOnce(IjkLibLoader libLoader) { synchronized (IjkMediaPlayer.class) { if (!mIsLibLoaded) { if (libLoader == null) libLoader = sLocalLibLoader; .

2022-02-26 20:34:02 918

原创 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 1561

原创 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 784 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 1076

原创 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 330

原创 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 2247

原创 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 1268

原创 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 7558

空空如也

空空如也

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

TA关注的人

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