ILM ADO storage tiering policy on table partition

GOAL

This article shows an example for applying ILM ADO storage tiering policy on table partition.

SOLUTION

The example creates and enforces ADO storage tiering policy on the partition JAN_1_2007 of the ILM_DEMO table.

The policy is created by the following command:

ALTER TABLE ILM_DEMO MODIFY PARTITION JAN_1_2007 ILM ADD POLICY TIER TO ILMTSDEMO_LOWCOST;

The example shows that the partition JAN_1_2007 is originally stored on ILM_SOURCE tablespace.

After data load into partition JAN_1_2007, the ILM_SOURCE tablespace got 75% full, 25% free.

We added a storage tiering policy to partition JAN_1_2007 to move it to ILMTSDEMO_LOWCOST tablespace.

The policy evaluates to true when the tablespace containing the object meets the tablespace fullness threshold.

The example shows that this did not happen initally and dba_ilmevaluationdetails show PRECONDITION NOT SATISFIED after policy evaluation.

In order to the policy to evaluate to true we adjusted the ILM parameters TBS_PERCENT_FREE and TBS_PERCENT_USED, then the policy evaluated to true and the corresponding ILM job was triggered to carry out the move of the JAN_1_2007 partition to the ILMTSDEMO_LOWCOST tablespace.

After the ILM job completed, the corresponding storage tiering policy was disabled automatically.

Througout the example we forced the evaluation of the policy instead of waiting for the maintenance window to open and trigger the policy evaluation and the corresponding job (as by default ILM policies are evaluated in the maintenance window).

The example script is the following.

You may need to execute the dbms_ilm_admin procedures as SYS AS SYSDBA user in order to avoid ORA-38330: insufficient privilege for ILM operation. This is due to bug 16887946, which is fixed in 12.2.

For simplicity the example below has been executed as user SYS AS SYSDBA in 12.1.0.2.

spool tier_part_ex1.log

set lines 300

set echo on

col name format a30

col policy_name format a11;

col object_owner format a10;

col object_name format a20;

col object_type format a20;

col subobject_name format a23;

col enabled format a7;

col tier_tablespace format a20;

col tier_status format a20;

col custom_function format a20 wrapped;

col TABLE_NAME format a20

col PARTITION_NAME format a25

col "Last Analyzed" format a20

col high_value format a40

col segment_name format a30

col comments format a30

col START_TIME format a30

col COMPLETION_TIME format a30

col STATISTICS format a30

col JOB_NAME format a20

col task_owner format a20

set serveroutput on

alter session set nls_date_format='DD-MM-YYYY HH24:MI:SS';

-- Pre-requisites

-- conn sys as sysdba

-- heat_map = ON

alter system set heat_map = ON;

CREATE TABLESPACE ILM_SOURCE DATAFILE 'ILM_SOURCE.dbf' SIZE 12m REUSE AUTOEXTEND ON NEXT 2m MAXSIZE 1024M EXTENT MANAGEMENT LOCAL;

CREATE TABLESPACE ILMTSDEMO_LOWCOST DATAFILE 'ILMTSDEMO_LOWCOST.dbf' SIZE 50m REUSE AUTOEXTEND ON NEXT 5m MAXSIZE 1024M EXTENT MANAGEMENT LOCAL;

-- Create table and partition JAN_1_2007 in the ILM_SOURCE tablspace and load rows into it

CREATE TABLE ILM_DEMO

(

ILM_TRD_EFF_DT DATE NOT NULL,

ILM_ADT_TIMESTAMP TIMESTAMP(6) DEFAULT (SYSDATE) NOT NULL,

ILM_BIN_NO VARCHAR2(20 BYTE) DEFAULT ' ' NOT NULL,

ILM_NETWRK_LEVEL VARCHAR2(2 BYTE) DEFAULT ' ' NOT NULL

)

PARTITION BY RANGE (ILM_TRD_EFF_DT)

(

PARTITION JAN_1_2007 VALUES LESS THAN (TO_DATE(' 2007-01-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

NOCOMPRESS TABLESPACE ILM_SOURCE,

PARTITION ILM_DEMO_PART_20140430 VALUES LESS THAN (TO_DATE(' 2014-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

NOCOMPRESS ,

PARTITION ILM_DEMO_PART_20140515 VALUES LESS THAN (TO_DATE(' 2014-05-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

NOCOMPRESS

);

-- Insert rows into partition JAN_1_2007

begin

FOR j in 1..80000 LOOP

insert into ILM_DEMO (ILM_TRD_EFF_DT) values (TO_DATE(' 2007-01-10 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')+1/j);

end loop;

commit;

end;

/

-- Collects stats on the table, so that user_tab_partitions return accurate values

begin DBMS_STATS.GATHER_TABLE_STATS(ownname => user, tabname => 'ILM_DEMO', granularity => 'ALL', cascade => DBMS_STATS.AUTO_CASCADE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', estimate_percent => NULL);

end;

select table_name , PARTITION_NAME , TABLESPACE_NAME , to_char(LAST_ANALYZED,'MM/DD/YYYY HH24:MI') as "Last Analyzed" , NUM_ROWS , BLOCKS from user_tab_partitions where table_name='ILM_DEMO' order by table_name ,partition_position;

select table_name , TABLESPACE_NAME , to_char(LAST_ANALYZED,'MM/DD/YYYY HH24:MI') as "Last Analyzed" , NUM_ROWS , BLOCKS

from user_tables where table_name='ILM_DEMO' order by table_name ;

select tablespace_name, segment_name, segment_type,partition_name from user_segments where partition_name='JAN_1_2007';

-- Query space in the ILM_SOURCE tablespace

-- Note % Free and % Used values.

-- We will come back to this later at the storage tiering policy

SELECT /* + RULE */ df.tablespace_name "Tablespace",

df.bytes / (1024 * 1024) "Size (MB)",

SUM(fs.bytes) / (1024 * 1024) "Free (MB)",

Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",

Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"

FROM dba_free_space fs,

(SELECT tablespace_name,SUM(bytes) bytes

FROM dba_data_files

GROUP BY tablespace_name) df

WHERE fs.tablespace_name (+) = df.tablespace_name and df.tablespace_name ='ILM_SOURCE'

GROUP BY df.tablespace_name,df.bytes

Order by 4;

-- Create a storage tiering policy on PARTITION JAN_1_2007

-- Note the decision to move segment depends on the default thresholds (see dba_ilmparameters for current values).

ALTER TABLE ILM_DEMO MODIFY PARTITION JAN_1_2007 ILM ADD POLICY TIER TO ILMTSDEMO_LOWCOST;

--info on policy

select * from dba_ilmparameters;

select * from user_ILMDATAMOVEMENTPOLICIES;

select * from user_ilmobjects;

select * from user_ilmpolicies;

-- Force evaluation of the policy, and execution of ADO task

-- for this demo we cannot wait for the maintenance window to open and trigger the ADO policies jobs.

-- Instead, we are going to use the following PL/SQL block and trigger it.

DECLARE

v_executionid number;

BEGIN

dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA,

execution_mode => dbms_ilm.ilm_execution_offline,

task_id => v_executionid);

END;

/

-- shows that the partition has NOT moved to ILMTSDEMO_LOWCOST tablespace

select tablespace_name, segment_name, segment_type,partition_name from user_segments where partition_name='JAN_1_2007';

--shows ILM task, and that corresponding job has not been created

-- because during policy evaluation PRECONDITION NOT SATISFIED

select t.task_id, t.task_owner, t.state,e.policy_name, e.object_owner, e.object_name,e.SELECTED_FOR_EXECUTION

,r.job_name,r.job_state,r.start_time,r.completion_time,r.statistics

from dba_ilmtasks t,dba_ilmevaluationdetails e,dba_ilmresults r

where t.task_id=e.task_id(+) and t.task_id=r.task_id(+) and e.object_owner = user;

-- Adjust TBS_PERCENT_FREE, TBS_PERCENT_USED if you need to in order to get the evaluation of the policy to true,

-- and get the corresponding storage tiering job triggered.

-- You may need to execute these as SYS AS DBA user due to Bug 16887946

-- Tablespace usage threshold paramters in storage tiering

begin dbms_ilm_admin.customize_ilm(DBMS_ILM_ADMIN.TBS_PERCENT_FREE,30);

dbms_ilm_admin.customize_ilm(DBMS_ILM_ADMIN.TBS_PERCENT_USED,70);

end;

select * from dba_ilmparameters;

-- Force evaluation of the policy, and execution of ADO task

DECLARE

v_executionid number;

BEGIN

dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA,

execution_mode => dbms_ilm.ilm_execution_offline,

task_id => v_executionid);

END;

/

--shows ILM task, corresponding job, and its completion status

select t.task_id, t.task_owner, t.state,e.policy_name, e.object_owner, e.object_name,e.SELECTED_FOR_EXECUTION

,r.job_name,r.job_state,r.start_time,r.completion_time,r.statistics

from dba_ilmtasks t,dba_ilmevaluationdetails e,dba_ilmresults r

where t.task_id=e.task_id(+) and t.task_id=r.task_id(+) and e.object_owner = user;

-- wait for 20 seconds until job completes

EXEC dbms_lock.sleep(20);

select t.task_id, t.task_owner, t.state,e.policy_name, e.object_owner, e.object_name,e.SELECTED_FOR_EXECUTION

,r.job_name,r.job_state,r.start_time,r.completion_time,r.statistics

from dba_ilmtasks t,dba_ilmevaluationdetails e,dba_ilmresults r

where t.task_id=e.task_id(+) and t.task_id=r.task_id(+) and e.object_owner = user;

-- shows that the partition has moved to ILMTSDEMO_LOWCOST tablespace

select tablespace_name, segment_name, segment_type,partition_name from user_segments where partition_name='JAN_1_2007';

-- A segment level tiering policy is disabled after its first execution.

select * from user_ILMDATAMOVEMENTPOLICIES;

select * from user_ilmobjects;

spool off

An output of the above is the following:

SQL> -- Pre-requisites

SQL> -- conn sys as sysdba

SQL>

SQL> -- heat_map = ON

SQL> alter system set heat_map = ON;

System altered.

SQL>

SQL> CREATE TABLESPACE ILM_SOURCE DATAFILE 'ILM_SOURCE.dbf' SIZE 12m REUSE AUTOEXTEND ON NEXT 2m MAXSIZE 1024M EXTENT MANAGEMENT LOCAL;

Tablespace created.

SQL> CREATE TABLESPACE ILMTSDEMO_LOWCOST DATAFILE 'ILMTSDEMO_LOWCOST.dbf' SIZE 50m REUSE AUTOEXTEND ON NEXT 5m MAXSIZE 1024M EXTENT MANAGEMENT LOCAL;

Tablespace created.

SQL>

SQL>

SQL> -- Create table and partition JAN_1_2007 in the ILM_SOURCE tablspace and load rows into it

SQL> CREATE TABLE ILM_DEMO

2 (

3 ILM_TRD_EFF_DT DATE NOT NULL,

4 ILM_ADT_TIMESTAMP TIMESTAMP(6) DEFAULT (SYSDATE) NOT NULL,

5 ILM_BIN_NO VARCHAR2(20 BYTE) DEFAULT ' ' NOT NULL,

6 ILM_NETWRK_LEVEL VARCHAR2(2 BYTE) DEFAULT ' ' NOT NULL

7 )

8 PARTITION BY RANGE (ILM_TRD_EFF_DT)

9 (

10 PARTITION JAN_1_2007 VALUES LESS THAN (TO_DATE(' 2007-01-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

11 NOCOMPRESS TABLESPACE ILM_SOURCE,

12 PARTITION ILM_DEMO_PART_20140430 VALUES LESS THAN (TO_DATE(' 2014-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

13 NOCOMPRESS ,

14 PARTITION ILM_DEMO_PART_20140515 VALUES LESS THAN (TO_DATE(' 2014-05-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

15 NOCOMPRESS

16 );

Table created.

SQL>

SQL> -- Insert rows into partition JAN_1_2007

SQL> begin

2 FOR j in 1..80000 LOOP

3 insert into ILM_DEMO (ILM_TRD_EFF_DT) values (TO_DATE(' 2007-01-10 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')+1/j);

4 end loop;

5 commit;

6 end;

7 /

PL/SQL procedure successfully completed.

SQL>

SQL> -- Collects stats on the table, so that user_tab_partitions return accurate values

SQL> exec DBMS_STATS.GATHER_TABLE_STATS(ownname => user, tabname => 'ILM_DEMO', granularity => 'ALL', cascade => DBMS_STATS.AUTO_CASCADE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', estimate_percent => NULL);

PL/SQL procedure successfully completed.

SQL>

SQL> select table_name , PARTITION_NAME , TABLESPACE_NAME , to_char(LAST_ANALYZED,'MM/DD/YYYY HH24:MI') as "Last Analyzed" , NUM_ROWS , BLOCKS from user_tab_partitions where table_name='ILM_DEMO' order by table_name ,partition_position;

TABLE_NAME PARTITION_NAME TABLESPACE_NAME Last Analyzed NUM_ROWS BLOCKS


ILM_DEMO JAN_1_2007 ILM_SOURCE 01/31/2015 12:59 80000 1006

ILM_DEMO ILM_DEMO_PART_20140430 SYSTEM 01/31/2015 12:59 0 0

ILM_DEMO ILM_DEMO_PART_20140515 SYSTEM 01/31/2015 12:59 0 0

SQL>

SQL> select tablespace_name, segment_name, segment_type,partition_name from user_segments where partition_name='JAN_1_2007';

TABLESPACE_NAME SEGMENT_NAME SEGMENT_TYPE PARTITION_NAME


ILM_SOURCE ILM_DEMO TABLE PARTITION JAN_1_2007

SQL>

SQL> -- Query space in the ILM_SOURCE tablespace

SQL> -- Note % Free and % Used values.

SQL> -- We will come back to this later at the storage tiering policy

SQL>

SQL> SELECT /* + RULE */ df.tablespace_name "Tablespace",

2 df.bytes / (1024 * 1024) "Size (MB)",

3 SUM(fs.bytes) / (1024 * 1024) "Free (MB)",

4 Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",

5 Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"

6 FROM dba_free_space fs,

7 (SELECT tablespace_name,SUM(bytes) bytes

8 FROM dba_data_files

9 GROUP BY tablespace_name) df

10 WHERE fs.tablespace_name (+) = df.tablespace_name and df.tablespace_name ='ILM_SOURCE'

11 GROUP BY df.tablespace_name,df.bytes

12 Order by 4;

Tablespace Size (MB) Free (MB) % Free % Used


ILM_SOURCE 12 3 25 75

SQL>

SQL>

SQL> -- Create a storage tiering policy on PARTITION JAN_1_2007

SQL> -- Note the decision to move segment depends on the default thresholds (see dba_ilmparameters for current values).

SQL>

SQL> ALTER TABLE ILM_DEMO MODIFY PARTITION JAN_1_2007 ILM ADD POLICY TIER TO ILMTSDEMO_LOWCOST;

Table altered.

SQL>

SQL> --info on policy

SQL> select * from dba_ilmparameters;

NAME VALUE


ENABLED 1

RETENTION TIME 30

JOB LIMIT 2

EXECUTION MODE 2

EXECUTION INTERVAL 15

TBS PERCENT USED 85

TBS PERCENT FREE 25

POLICY TIME 0

8 rows selected.

SQL> select * from user_ILMDATAMOVEMENTPOLICIES;

POLICY_NAME ACTION_TYPE SCOPE COMPRESSION_LEVEL TIER_TABLESPACE TIER_STATUS CONDITION_TYPE CONDITION_DAYS CUSTOM_FUNCTION


P382 STORAGE SEGMENT ILMTSDEMO_LOWCOST 0

SQL> select * from user_ilmobjects;

POLICY_NAME OBJECT_OWN OBJECT_NAME SUBOBJECT_NAME OBJECT_TYPE INHERITED_FROM ENABLED DEL


P382 SYS ILM_DEMO JAN_1_2007 TABLE PARTITION POLICY NOT INHERITED YES NO

SQL> select * from user_ilmpolicies;

POLICY_NAME POLICY_TYPE TABLESPACE ENABLED DELETED


P382 DATA MOVEMENT YES NO

SQL>

SQL> -- Force evaluation of the policy, and execution of ADO task

SQL> -- for this demo we cannot wait for the maintenance window to open and trigger the ADO policies jobs.

SQL> -- Instead, we are going to use the following PL/SQL block and trigger it.

SQL> DECLARE

2 v_executionid number;

3 BEGIN

4 dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA,

5 execution_mode => dbms_ilm.ilm_execution_offline,

6 task_id => v_executionid);

7 END;

8 /

PL/SQL procedure successfully completed.

SQL>

SQL> -- shows that the partition has NOT moved to ILMTSDEMO_LOWCOST tablespace

SQL> select tablespace_name, segment_name, segment_type,partition_name from user_segments where partition_name='JAN_1_2007';

TABLESPACE_NAME SEGMENT_NAME SEGMENT_TYPE PARTITION_NAME


ILM_SOURCE ILM_DEMO TABLE PARTITION JAN_1_2007

SQL>

SQL> --shows ILM task, and that corresponding job has not been created

SQL> -- because during policy evaluation PRECONDITION NOT SATISFIED

SQL> select t.task_id, t.task_owner, t.state,e.policy_name, e.object_owner, e.object_name,e.SELECTED_FOR_EXECUTION

2 ,r.job_name,r.job_state,r.start_time,r.completion_time,r.statistics

3 from dba_ilmtasks t,dba_ilmevaluationdetails e,dba_ilmresults r

4 where t.task_id=e.task_id(+) and t.task_id=r.task_id(+) and e.object_owner = user;

TASK_ID TASK_OWNER STATE POLICY_NAME OBJECT_OWN OBJECT_NAME SELECTED_FOR_EXECUTION JOB_NAME JOB_STATE START_TIME COMPLETION_TIME STATISTICS


483 SYS COMPLETED P382 SYS ILM_DEMO PRECONDITION NOT SATISFIED

SQL>

SQL>

SQL> -- Adjust TBS_PERCENT_FREE, TBS_PERCENT_USED if you need to in order to get the evaluation of the policy to true,

SQL> -- and get the corresponding storage tiering job triggered.

SQL> -- You may need to execute these as SYS AS DBA user due to Bug 16887946

SQL> -- Tablespace usage threshold paramters in storage tiering

SQL> EXEC dbms_ilm_admin.customize_ilm(DBMS_ILM_ADMIN.TBS_PERCENT_FREE,30);

PL/SQL procedure successfully completed.

SQL> EXEC dbms_ilm_admin.customize_ilm(DBMS_ILM_ADMIN.TBS_PERCENT_USED,70);

PL/SQL procedure successfully completed.

SQL>

SQL> select * from dba_ilmparameters;

NAME VALUE


ENABLED 1

RETENTION TIME 30

JOB LIMIT 2

EXECUTION MODE 2

EXECUTION INTERVAL 15

TBS PERCENT USED 70

TBS PERCENT FREE 30

POLICY TIME 0

8 rows selected.

SQL>

SQL> -- Force evaluation of the policy, and execution of ADO task

SQL> DECLARE

2 v_executionid number;

3 BEGIN

4 dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA,

5 execution_mode => dbms_ilm.ilm_execution_offline,

6 task_id => v_executionid);

7 END;

8 /

PL/SQL procedure successfully completed.

SQL>

SQL> --shows ILM task, corresponding job, and its completion status

SQL> select t.task_id, t.task_owner, t.state,e.policy_name, e.object_owner, e.object_name,e.SELECTED_FOR_EXECUTION

2 ,r.job_name,r.job_state,r.start_time,r.completion_time,r.statistics

3 from dba_ilmtasks t,dba_ilmevaluationdetails e,dba_ilmresults r

4 where t.task_id=e.task_id(+) and t.task_id=r.task_id(+) and e.object_owner = user;

TASK_ID TASK_OWNER STATE POLICY_NAME OBJECT_OWN OBJECT_NAME SELECTED_FOR_EXECUTION JOB_NAME JOB_STATE START_TIME COMPLETION_TIME STATISTICS


484 SYS ACTIVE P382 SYS ILM_DEMO SELECTED FOR EXECUTION ILMJOB17892 JOB CREATED

483 SYS COMPLETED P382 SYS ILM_DEMO PRECONDITION NOT SATISFIED

SQL>

SQL> -- wait for 20 seconds until job completes

SQL> EXEC dbms_lock.sleep(20);

PL/SQL procedure successfully completed.

SQL>

SQL> select t.task_id, t.task_owner, t.state,e.policy_name, e.object_owner, e.object_name,e.SELECTED_FOR_EXECUTION

2 ,r.job_name,r.job_state,r.start_time,r.completion_time,r.statistics

3 from dba_ilmtasks t,dba_ilmevaluationdetails e,dba_ilmresults r

4 where t.task_id=e.task_id(+) and t.task_id=r.task_id(+) and e.object_owner = user;

TASK_ID TASK_OWNER STATE POLICY_NAME OBJECT_OWN OBJECT_NAME SELECTED_FOR_EXECUTION JOB_NAME JOB_STATE START_TIME COMPLETION_TIME STATISTICS


484 SYS COMPLETED P382 SYS ILM_DEMO SELECTED FOR EXECUTION ILMJOB17892 COMPLETED SUCCESSFULLY 31-JAN-15 12.59.54.965415 PM 31-JAN-15 12.59.55.064624 PM

483 SYS COMPLETED P382 SYS ILM_DEMO PRECONDITION NOT SATISFIED

SQL>

SQL> -- shows that the partition has moved to ILMTSDEMO_LOWCOST tablespace

SQL> select tablespace_name, segment_name, segment_type,partition_name from user_segments where partition_name='JAN_1_2007';

TABLESPACE_NAME SEGMENT_NAME SEGMENT_TYPE PARTITION_NAME


ILMTSDEMO_LOWCOST ILM_DEMO TABLE PARTITION JAN_1_2007

SQL>

SQL> -- A segment level tiering policy is disabled after its first execution.

SQL> select * from user_ILMDATAMOVEMENTPOLICIES;

POLICY_NAME ACTION_TYPE SCOPE COMPRESSION_LEVEL TIER_TABLESPACE TIER_STATUS CONDITION_TYPE CONDITION_DAYS CUSTOM_FUNCTION


P382 STORAGE SEGMENT ILMTSDEMO_LOWCOST 0

SQL> select * from user_ilmobjects;

POLICY_NAME OBJECT_OWN OBJECT_NAME SUBOBJECT_NAME OBJECT_TYPE INHERITED_FROM ENABLED DEL


P382 SYS ILM_DEMO JAN_1_2007 TABLE PARTITION POLICY NOT INHERITED NO NO

SQL>

SQL> spool off

Next step:

Check out Note 1967038.1 Example for ILM ADO Storage Tiering Policy Using Custom PL/SQL Policy Function on Table Partition

相关推荐
superconvert12 小时前
主流流媒体的综合性能大 PK ( smart_rtmpd, srs, zlm, nginx rtmp )
websocket·ffmpeg·webrtc·hevc·rtmp·h264·hls·dash·rtsp·srt·flv
cuijiecheng201819 小时前
音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现
ffmpeg·音视频·aac
0点51 胜19 小时前
[ffmpeg] 视频格式转换
ffmpeg
Jerry 二河小鱼1 天前
在Linux中安装FFmpeg
linux·运维·服务器·ffmpeg
0点51 胜2 天前
[ffmpeg] 音视频编码
ffmpeg·音视频
0点51 胜2 天前
[ffmpeg]音频格式转换
开发语言·c++·ffmpeg
PlumCarefree3 天前
基于鸿蒙API10的RTSP播放器(五:拖动底部视频滑轨实现跳转)
华为·ffmpeg·音视频
LuckyInn3 天前
从安装ffmpeg开始,把一个视频按照每秒30帧fps剪切为图片
ffmpeg·音视频
cuijiecheng20183 天前
FFmpeg源码:skip_bits、skip_bits1、show_bits函数分析
ffmpeg
__Destiny__3 天前
视频格式转为mp4(使用ffmpeg)
ffmpeg·视频编解码