From 863ebe6f83de6e884a4b1870231678c9259f3c90 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Tue, 8 Nov 2016 19:27:21 +0800 Subject: avformat/flvenc: add add_keyframe_index option Add keyframe index metadata Used to facilitate seeking; particularly for HTTP pseudo streaming. 1. read live streaming or file by sequence 2. if use add_keyframe_index option, add a mark flag at the position, use to insert new context at the last step. 3. add the keyframes *offset* and *timestamp* into a list 4. if use add_keyframe_index option, shift the metadata data from mark flag offset 5. insert the keyframes *offset* and *timestamp* from the list by sequence 6. free the list 7. end. Add FATE test case; Reviewed-by: Lou Logan Signed-off-by: Steven Liu Signed-off-by: Michael Niedermayer --- tests/Makefile | 1 + tests/fate-run.sh | 4 ++++ tests/fate/flvenc.mak | 11 +++++++++++ tests/ref/fate/flv-add_keyframe_index | 12 ++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 tests/fate/flvenc.mak create mode 100644 tests/ref/fate/flv-add_keyframe_index (limited to 'tests') diff --git a/tests/Makefile b/tests/Makefile index 8e810ff195..07e839e316 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -132,6 +132,7 @@ include $(SRC_PATH)/tests/fate/fifo-muxer.mak include $(SRC_PATH)/tests/fate/filter-audio.mak include $(SRC_PATH)/tests/fate/filter-video.mak include $(SRC_PATH)/tests/fate/flac.mak +include $(SRC_PATH)/tests/fate/flvenc.mak include $(SRC_PATH)/tests/fate/gapless.mak include $(SRC_PATH)/tests/fate/gif.mak include $(SRC_PATH)/tests/fate/h264.mak diff --git a/tests/fate-run.sh b/tests/fate-run.sh index c640cc5794..29a36cea3a 100755 --- a/tests/fate-run.sh +++ b/tests/fate-run.sh @@ -129,6 +129,10 @@ framecrc(){ ffmpeg "$@" -flags +bitexact -fflags +bitexact -f framecrc - } +ffmetadata(){ + ffmpeg "$@" -flags +bitexact -fflags +bitexact -f ffmetadata - +} + framemd5(){ ffmpeg "$@" -flags +bitexact -fflags +bitexact -f framemd5 - } diff --git a/tests/fate/flvenc.mak b/tests/fate/flvenc.mak new file mode 100644 index 0000000000..3881bcd105 --- /dev/null +++ b/tests/fate/flvenc.mak @@ -0,0 +1,11 @@ +tests/data/add_keyframe_index.flv: TAG = GEN +tests/data/add_keyframe_index.flv: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data + $(M)$(TARGET_EXEC) $(TARGET_PATH)/$< \ + -f lavfi -i "sws_flags=+accurate_rnd+bitexact;testsrc=r=7:n=2:d=20" -sws_flags '+accurate_rnd+bitexact' -metadata "encoder=Lavf" -pix_fmt yuv420p -c:v flv1 -g 7 -f flv -flags +bitexact \ + -flvflags add_keyframe_index -idct simple -dct int -y $(TARGET_PATH)/tests/data/add_keyframe_index.flv 2> /dev/null; + +FATE_AFILTER-$(call ALLYES, FLV_MUXER FLV_DEMUXER AVDEVICE TESTSRC_FILTER LAVFI_INDEV FLV_ENCODER) += fate-flv-add_keyframe_index +fate-flv-add_keyframe_index: tests/data/add_keyframe_index.flv +fate-flv-add_keyframe_index: CMD = ffmetadata -flags +bitexact -i $(TARGET_PATH)/tests/data/add_keyframe_index.flv + + diff --git a/tests/ref/fate/flv-add_keyframe_index b/tests/ref/fate/flv-add_keyframe_index new file mode 100644 index 0000000000..1c4da65d90 --- /dev/null +++ b/tests/ref/fate/flv-add_keyframe_index @@ -0,0 +1,12 @@ +;FFMETADATA1 +hasVideo=true +hasKeyframes=true +hasAudio=false +hasMetadata=true +canSeekToEnd=true +datasize=629776 +videosize=629381 +audiosize=0 +lasttimestamp=20 +lastkeyframetimestamp=19 +lastkeyframelocation=597963 -- cgit v1.2.3