瀏覽代碼

相似比较 java jni api

DevYK 3 年之前
父節點
當前提交
3054ca47bc

+ 8 - 12
README.md

@@ -199,21 +199,17 @@ static String getVideoSimilarityLists(String inputjson)
 
 ```
 
-比较参考
+相似比较 API
+
 imageHash 每个字符串中的字符比较,如果对应位置上一样,即为相似,
 如果有 10 帧图像,其中经过比较有 5 张图片相似,那么他们的相似值为 50%
 
-```c
-
-float fingerprint_compare(const char *arr,const char *arr2, int len) {
-    int size = len;
-    int sim_sum = 0;
-    for (int i = 0; i < size; ++i) {
-        if (arr[i] == arr2[i])
-            sim_sum++;
-    }
-    return sim_sum * 1.0 / size;
-}
+```java
+  //检测
+  String src = PQCVMediaProcessor.getVideoSimilarityLists(sVIS[0]);
+  String src2 = PQCVMediaProcessor.getVideoSimilarityLists(sVIS[1]);
+  //识别 返回 0.0~1.0  
+  float v = PQCVMediaProcessor.getVideoSimilarityValue(src, src2);
 
 ```
 

+ 2 - 0
java/src/com.bytesflow.opencv.media/jni/PQCVMediaProcessor.java

@@ -31,5 +31,7 @@ public class PQCVMediaProcessor {
 
     public native static String getVideoSimilarityLists(String inputjson);
 
+    public native static float getVideoSimilarityValue(String srcJson,String src1Json);
+
     public native static int blurDetectionFromImageBytes(byte[] data);
 }

+ 15 - 85
java/src/com.bytesflow.opencv.media/test/OpenCVImageBlurTest.java

@@ -10,96 +10,16 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+
 public class OpenCVImageBlurTest {
     private static String sIMAGE_PATH = "/Users/devyk/Downloads/IMG_3067.PNG";
     private static String sSO_PATH = "/Users/devyk/Data/Project/piaoquan/OpenCVSample/output/lib/libpiaoquan_java_opencv.dylib";
 
+    private static boolean TEST_COMPARE = true;
     private static String[] sVIS = {
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/1f26e1aeb2ae482cb3889471c1b1d79e-1526911829592.m3u8\",\"clips\":[{\"startTimeMs\":3700,\"endTimeMs\":4700},{\"startTimeMs\":7400,\"endTimeMs\":8400},{\"startTimeMs\":11100,\"endTimeMs\":12100},{\"startTimeMs\":14800,\"endTimeMs\":15800},{\"startTimeMs\":18500,\"endTimeMs\":19500},{\"startTimeMs\":22200,\"endTimeMs\":23200},{\"startTimeMs\":25900,\"endTimeMs\":26900},{\"startTimeMs\":29600,\"endTimeMs\":30600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/42bb3311ceb24e33a6eb6baa02120d6e-1526971028761.m3u8\",\"clips\":[{\"startTimeMs\":4700,\"endTimeMs\":5700},{\"startTimeMs\":9400,\"endTimeMs\":10400},{\"startTimeMs\":14100,\"endTimeMs\":15100},{\"startTimeMs\":18800,\"endTimeMs\":19800},{\"startTimeMs\":23500,\"endTimeMs\":24500},{\"startTimeMs\":28200,\"endTimeMs\":29200},{\"startTimeMs\":32900,\"endTimeMs\":33900},{\"startTimeMs\":37600,\"endTimeMs\":38600}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/c7300d7539e6459ea8bdf7f2130a8bb7-1526971090169.m3u8\",\"clips\":[{\"startTimeMs\":1200,\"endTimeMs\":2200},{\"startTimeMs\":2400,\"endTimeMs\":3400},{\"startTimeMs\":3600,\"endTimeMs\":4600},{\"startTimeMs\":4800,\"endTimeMs\":5800},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7200,\"endTimeMs\":8200},{\"startTimeMs\":8400,\"endTimeMs\":9400},{\"startTimeMs\":9600,\"endTimeMs\":10600}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/845e3ac348424074a1bc96c34f49d073-1526971700579.m3u8\",\"clips\":[{\"startTimeMs\":5000,\"endTimeMs\":6000},{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":15000,\"endTimeMs\":16000},{\"startTimeMs\":20000,\"endTimeMs\":21000},{\"startTimeMs\":25000,\"endTimeMs\":26000},{\"startTimeMs\":30000,\"endTimeMs\":31000},{\"startTimeMs\":35000,\"endTimeMs\":36000},{\"startTimeMs\":40000,\"endTimeMs\":41000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/696beece8ae94f019d8f3b74027af597-1526971556556.m3u8\",\"clips\":[{\"startTimeMs\":5000,\"endTimeMs\":6000},{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":15000,\"endTimeMs\":16000},{\"startTimeMs\":20000,\"endTimeMs\":21000},{\"startTimeMs\":25000,\"endTimeMs\":26000},{\"startTimeMs\":30000,\"endTimeMs\":31000},{\"startTimeMs\":35000,\"endTimeMs\":36000},{\"startTimeMs\":40000,\"endTimeMs\":41000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/22564f7e27da451cb1bfe007ac2d4b64-1526973329097.m3u8\",\"clips\":[{\"startTimeMs\":3700,\"endTimeMs\":4700},{\"startTimeMs\":7400,\"endTimeMs\":8400},{\"startTimeMs\":11100,\"endTimeMs\":12100},{\"startTimeMs\":14800,\"endTimeMs\":15800},{\"startTimeMs\":18500,\"endTimeMs\":19500},{\"startTimeMs\":22200,\"endTimeMs\":23200},{\"startTimeMs\":25900,\"endTimeMs\":26900},{\"startTimeMs\":29600,\"endTimeMs\":30600}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3c077100f95a4e5a9729817f761c3891-1526973145003.m3u8\",\"clips\":[{\"startTimeMs\":1000,\"endTimeMs\":2000},{\"startTimeMs\":2000,\"endTimeMs\":3000},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":5000,\"endTimeMs\":6000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7000,\"endTimeMs\":8000},{\"startTimeMs\":8000,\"endTimeMs\":9000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/63eba0d23ef54220a365c2ea27e099ca-1526974949194.m3u8\",\"clips\":[{\"startTimeMs\":1600,\"endTimeMs\":2600},{\"startTimeMs\":3200,\"endTimeMs\":4200},{\"startTimeMs\":4800,\"endTimeMs\":5800},{\"startTimeMs\":6400,\"endTimeMs\":7400},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":9600,\"endTimeMs\":10600},{\"startTimeMs\":11200,\"endTimeMs\":12200},{\"startTimeMs\":12800,\"endTimeMs\":13800}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/11522bb2edc44704b6a7bf99db79ce9a-1526973386517.m3u8\",\"clips\":[{\"startTimeMs\":577800,\"endTimeMs\":578800},{\"startTimeMs\":1155600,\"endTimeMs\":1156600},{\"startTimeMs\":1733400,\"endTimeMs\":1734400},{\"startTimeMs\":2311200,\"endTimeMs\":2312200},{\"startTimeMs\":2889000,\"endTimeMs\":2890000},{\"startTimeMs\":3466800,\"endTimeMs\":3467800},{\"startTimeMs\":4044600,\"endTimeMs\":4045600},{\"startTimeMs\":4622400,\"endTimeMs\":4623400}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/960d0ebe01a4436fa8a529794cfaba9c-1526975437328.m3u8\",\"clips\":[{\"startTimeMs\":5800,\"endTimeMs\":6800},{\"startTimeMs\":11600,\"endTimeMs\":12600},{\"startTimeMs\":17400,\"endTimeMs\":18400},{\"startTimeMs\":23200,\"endTimeMs\":24200},{\"startTimeMs\":29000,\"endTimeMs\":30000},{\"startTimeMs\":34800,\"endTimeMs\":35800},{\"startTimeMs\":40600,\"endTimeMs\":41600},{\"startTimeMs\":46400,\"endTimeMs\":47400}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/294502ec3a024cadb098109e1a20d4f0-1526975532443.m3u8\",\"clips\":[{\"startTimeMs\":3900,\"endTimeMs\":4900},{\"startTimeMs\":7800,\"endTimeMs\":8800},{\"startTimeMs\":11700,\"endTimeMs\":12700},{\"startTimeMs\":15600,\"endTimeMs\":16600},{\"startTimeMs\":19500,\"endTimeMs\":20500},{\"startTimeMs\":23400,\"endTimeMs\":24400},{\"startTimeMs\":27300,\"endTimeMs\":28300},{\"startTimeMs\":31200,\"endTimeMs\":32200}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/fae8e90b484c401f8d0f19eb34455561-1526975711426.m3u8\",\"clips\":[{\"startTimeMs\":5700,\"endTimeMs\":6700},{\"startTimeMs\":11400,\"endTimeMs\":12400},{\"startTimeMs\":17100,\"endTimeMs\":18100},{\"startTimeMs\":22800,\"endTimeMs\":23800},{\"startTimeMs\":28500,\"endTimeMs\":29500},{\"startTimeMs\":34200,\"endTimeMs\":35200},{\"startTimeMs\":39900,\"endTimeMs\":40900},{\"startTimeMs\":45600,\"endTimeMs\":46600}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/0040292101904473b0040e2320c3efcf-1526975889832.m3u8\",\"clips\":[{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":20000,\"endTimeMs\":21000},{\"startTimeMs\":30000,\"endTimeMs\":31000},{\"startTimeMs\":40000,\"endTimeMs\":41000},{\"startTimeMs\":50000,\"endTimeMs\":51000},{\"startTimeMs\":60000,\"endTimeMs\":61000},{\"startTimeMs\":70000,\"endTimeMs\":71000},{\"startTimeMs\":80000,\"endTimeMs\":81000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/7bd4c113873b4676852077e7d260b9a2-1526975548835.m3u8\",\"clips\":[{\"startTimeMs\":581000,\"endTimeMs\":582000},{\"startTimeMs\":1162000,\"endTimeMs\":1163000},{\"startTimeMs\":1743000,\"endTimeMs\":1744000},{\"startTimeMs\":2324000,\"endTimeMs\":2325000},{\"startTimeMs\":2905000,\"endTimeMs\":2906000},{\"startTimeMs\":3486000,\"endTimeMs\":3487000},{\"startTimeMs\":4067000,\"endTimeMs\":4068000},{\"startTimeMs\":4648000,\"endTimeMs\":4649000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3cd24e339d224d76a8440ddba7bdafb6-1526976342232.m3u8\",\"clips\":[{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":16000,\"endTimeMs\":17000},{\"startTimeMs\":20000,\"endTimeMs\":21000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":28000,\"endTimeMs\":29000},{\"startTimeMs\":32000,\"endTimeMs\":33000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/4a0fc658822f473895d32306b0e8ccb0-1526976653858.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/b46fd76f98364b3abad8c1297a868f82-1526976612340.m3u8\",\"clips\":[{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":15000,\"endTimeMs\":16000},{\"startTimeMs\":18000,\"endTimeMs\":19000},{\"startTimeMs\":21000,\"endTimeMs\":22000},{\"startTimeMs\":24000,\"endTimeMs\":25000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/357e7e2ca49a4b5b9e77da9890d40516-1526976748450.m3u8\",\"clips\":[{\"startTimeMs\":16100,\"endTimeMs\":17100},{\"startTimeMs\":32200,\"endTimeMs\":33200},{\"startTimeMs\":48300,\"endTimeMs\":49300},{\"startTimeMs\":64400,\"endTimeMs\":65400},{\"startTimeMs\":80500,\"endTimeMs\":81500},{\"startTimeMs\":96600,\"endTimeMs\":97600},{\"startTimeMs\":112700,\"endTimeMs\":113700},{\"startTimeMs\":128800,\"endTimeMs\":129800}]}",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/933ba3fa9e0d47dd8690537a391626ac-1526976643105.m3u8\",\"clips\":[{\"startTimeMs\":2000,\"endTimeMs\":3000},{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":14000,\"endTimeMs\":15000},{\"startTimeMs\":16000,\"endTimeMs\":17000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/295bdd71626a4b79afbda49a507376f8-1526977035500.m3u8\",\"clips\":[{\"startTimeMs\":500,\"endTimeMs\":1000},{\"startTimeMs\":1000,\"endTimeMs\":1500},{\"startTimeMs\":1500,\"endTimeMs\":2000},{\"startTimeMs\":2000,\"endTimeMs\":2500},{\"startTimeMs\":2500,\"endTimeMs\":3000},{\"startTimeMs\":3000,\"endTimeMs\":3500},{\"startTimeMs\":3500,\"endTimeMs\":4000},{\"startTimeMs\":4000,\"endTimeMs\":4500}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/882a3e9f3ee9477daaeb7ffe2d49a8f7-1526977063076.m3u8\",\"clips\":[{\"startTimeMs\":900,\"endTimeMs\":1800},{\"startTimeMs\":1800,\"endTimeMs\":2700},{\"startTimeMs\":2700,\"endTimeMs\":3600},{\"startTimeMs\":3600,\"endTimeMs\":4500},{\"startTimeMs\":4500,\"endTimeMs\":5400},{\"startTimeMs\":5400,\"endTimeMs\":6300},{\"startTimeMs\":6300,\"endTimeMs\":7200},{\"startTimeMs\":7200,\"endTimeMs\":8100}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/159bc170787c4792a908082ce55e576a-1526979054584.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/731a031366e540be99c84da77a09616f-1526977523246.m3u8\",\"clips\":[{\"startTimeMs\":42500,\"endTimeMs\":43500},{\"startTimeMs\":85000,\"endTimeMs\":86000},{\"startTimeMs\":127500,\"endTimeMs\":128500},{\"startTimeMs\":170000,\"endTimeMs\":171000},{\"startTimeMs\":212500,\"endTimeMs\":213500},{\"startTimeMs\":255000,\"endTimeMs\":256000},{\"startTimeMs\":297500,\"endTimeMs\":298500},{\"startTimeMs\":340000,\"endTimeMs\":341000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/f1f7954e259c4520a2bcfe66789bf52c-1526979152701.m3u8\",\"clips\":[{\"startTimeMs\":29800,\"endTimeMs\":30800},{\"startTimeMs\":59600,\"endTimeMs\":60600},{\"startTimeMs\":89400,\"endTimeMs\":90400},{\"startTimeMs\":119200,\"endTimeMs\":120200},{\"startTimeMs\":149000,\"endTimeMs\":150000},{\"startTimeMs\":178800,\"endTimeMs\":179800},{\"startTimeMs\":208600,\"endTimeMs\":209600},{\"startTimeMs\":238400,\"endTimeMs\":239400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/0f59b65a02234115adf561e622d01794-1526980046160.m3u8\",\"clips\":[{\"startTimeMs\":2900,\"endTimeMs\":3900},{\"startTimeMs\":5800,\"endTimeMs\":6800},{\"startTimeMs\":8700,\"endTimeMs\":9700},{\"startTimeMs\":11600,\"endTimeMs\":12600},{\"startTimeMs\":14500,\"endTimeMs\":15500},{\"startTimeMs\":17400,\"endTimeMs\":18400},{\"startTimeMs\":20300,\"endTimeMs\":21300},{\"startTimeMs\":23200,\"endTimeMs\":24200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/0f0877a2e4f649ce8cbfc59601fa0858-1526982008014.m3u8\",\"clips\":[{\"startTimeMs\":4600,\"endTimeMs\":5600},{\"startTimeMs\":9200,\"endTimeMs\":10200},{\"startTimeMs\":13800,\"endTimeMs\":14800},{\"startTimeMs\":18400,\"endTimeMs\":19400},{\"startTimeMs\":23000,\"endTimeMs\":24000},{\"startTimeMs\":27600,\"endTimeMs\":28600},{\"startTimeMs\":32200,\"endTimeMs\":33200},{\"startTimeMs\":36800,\"endTimeMs\":37800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/ea8d7928cd9f460bbf270b34a1c2371a-1526982566017.m3u8\",\"clips\":[{\"startTimeMs\":1300,\"endTimeMs\":2300},{\"startTimeMs\":2600,\"endTimeMs\":3600},{\"startTimeMs\":3900,\"endTimeMs\":4900},{\"startTimeMs\":5200,\"endTimeMs\":6200},{\"startTimeMs\":6500,\"endTimeMs\":7500},{\"startTimeMs\":7800,\"endTimeMs\":8800},{\"startTimeMs\":9100,\"endTimeMs\":10100},{\"startTimeMs\":10400,\"endTimeMs\":11400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/change/video/12672c52cd7e42178af171b541c0ad31-1526982621482.m3u8\",\"clips\":[{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":36000,\"endTimeMs\":37000},{\"startTimeMs\":48000,\"endTimeMs\":49000},{\"startTimeMs\":60000,\"endTimeMs\":61000},{\"startTimeMs\":72000,\"endTimeMs\":73000},{\"startTimeMs\":84000,\"endTimeMs\":85000},{\"startTimeMs\":96000,\"endTimeMs\":97000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/change/video/7380a7de0a7d427c920a66878e901fee-1526983336196.m3u8\",\"clips\":[{\"startTimeMs\":1800,\"endTimeMs\":2800},{\"startTimeMs\":3600,\"endTimeMs\":4600},{\"startTimeMs\":5400,\"endTimeMs\":6400},{\"startTimeMs\":7200,\"endTimeMs\":8200},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10800,\"endTimeMs\":11800},{\"startTimeMs\":12600,\"endTimeMs\":13600},{\"startTimeMs\":14400,\"endTimeMs\":15400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/0e2bcaa263ef446e9fc2d9774a31c69c-1526985216670.m3u8\",\"clips\":[{\"startTimeMs\":1800,\"endTimeMs\":2800},{\"startTimeMs\":3600,\"endTimeMs\":4600},{\"startTimeMs\":5400,\"endTimeMs\":6400},{\"startTimeMs\":7200,\"endTimeMs\":8200},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10800,\"endTimeMs\":11800},{\"startTimeMs\":12600,\"endTimeMs\":13600},{\"startTimeMs\":14400,\"endTimeMs\":15400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/c689060a103e43f8a682b1326e03f15d-1526984278717.m3u8\",\"clips\":[{\"startTimeMs\":2400,\"endTimeMs\":3400},{\"startTimeMs\":4800,\"endTimeMs\":5800},{\"startTimeMs\":7200,\"endTimeMs\":8200},{\"startTimeMs\":9600,\"endTimeMs\":10600},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":14400,\"endTimeMs\":15400},{\"startTimeMs\":16800,\"endTimeMs\":17800},{\"startTimeMs\":19200,\"endTimeMs\":20200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/433771e3f6514db0a80d51efa93a953a-1526985077951.m3u8\",\"clips\":[{\"startTimeMs\":34900,\"endTimeMs\":35900},{\"startTimeMs\":69800,\"endTimeMs\":70800},{\"startTimeMs\":104700,\"endTimeMs\":105700},{\"startTimeMs\":139600,\"endTimeMs\":140600},{\"startTimeMs\":174500,\"endTimeMs\":175500},{\"startTimeMs\":209400,\"endTimeMs\":210400},{\"startTimeMs\":244300,\"endTimeMs\":245300},{\"startTimeMs\":279200,\"endTimeMs\":280200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/ca809952b1854260883e45715ef988f4-1526985201742.m3u8\",\"clips\":[{\"startTimeMs\":12600,\"endTimeMs\":13600},{\"startTimeMs\":25200,\"endTimeMs\":26200},{\"startTimeMs\":37800,\"endTimeMs\":38800},{\"startTimeMs\":50400,\"endTimeMs\":51400},{\"startTimeMs\":63000,\"endTimeMs\":64000},{\"startTimeMs\":75600,\"endTimeMs\":76600},{\"startTimeMs\":88200,\"endTimeMs\":89200},{\"startTimeMs\":100800,\"endTimeMs\":101800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/ed5706085a6046c1ac70157fc6f17faf-1526986615552.m3u8\",\"clips\":[{\"startTimeMs\":2300,\"endTimeMs\":3300},{\"startTimeMs\":4600,\"endTimeMs\":5600},{\"startTimeMs\":6900,\"endTimeMs\":7900},{\"startTimeMs\":9200,\"endTimeMs\":10200},{\"startTimeMs\":11500,\"endTimeMs\":12500},{\"startTimeMs\":13800,\"endTimeMs\":14800},{\"startTimeMs\":16100,\"endTimeMs\":17100},{\"startTimeMs\":18400,\"endTimeMs\":19400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/41771b053ce0440d8ab5d639a0bea815-1526986197013.m3u8\",\"clips\":[{\"startTimeMs\":11200,\"endTimeMs\":12200},{\"startTimeMs\":22400,\"endTimeMs\":23400},{\"startTimeMs\":33600,\"endTimeMs\":34600},{\"startTimeMs\":44800,\"endTimeMs\":45800},{\"startTimeMs\":56000,\"endTimeMs\":57000},{\"startTimeMs\":67200,\"endTimeMs\":68200},{\"startTimeMs\":78400,\"endTimeMs\":79400},{\"startTimeMs\":89600,\"endTimeMs\":90600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/c761ab710ffa420eb289e00686e0a6d0-1526986075020.m3u8\",\"clips\":[{\"startTimeMs\":37000,\"endTimeMs\":38000},{\"startTimeMs\":74000,\"endTimeMs\":75000},{\"startTimeMs\":111000,\"endTimeMs\":112000},{\"startTimeMs\":148000,\"endTimeMs\":149000},{\"startTimeMs\":185000,\"endTimeMs\":186000},{\"startTimeMs\":222000,\"endTimeMs\":223000},{\"startTimeMs\":259000,\"endTimeMs\":260000},{\"startTimeMs\":296000,\"endTimeMs\":297000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/231a97bb640e4547a62a5ceb0fce8c58-1526987552361.m3u8\",\"clips\":[{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":16000,\"endTimeMs\":17000},{\"startTimeMs\":20000,\"endTimeMs\":21000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":28000,\"endTimeMs\":29000},{\"startTimeMs\":32000,\"endTimeMs\":33000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/d544727989d941a19ff00dd285990d9f-1526987862649.m3u8\",\"clips\":[{\"startTimeMs\":4800,\"endTimeMs\":5800},{\"startTimeMs\":9600,\"endTimeMs\":10600},{\"startTimeMs\":14400,\"endTimeMs\":15400},{\"startTimeMs\":19200,\"endTimeMs\":20200},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":28800,\"endTimeMs\":29800},{\"startTimeMs\":33600,\"endTimeMs\":34600},{\"startTimeMs\":38400,\"endTimeMs\":39400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/54bcee5ce4aa49e18f3ebc7fd8b80655-1526987798195.m3u8\",\"clips\":[{\"startTimeMs\":4800,\"endTimeMs\":5800},{\"startTimeMs\":9600,\"endTimeMs\":10600},{\"startTimeMs\":14400,\"endTimeMs\":15400},{\"startTimeMs\":19200,\"endTimeMs\":20200},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":28800,\"endTimeMs\":29800},{\"startTimeMs\":33600,\"endTimeMs\":34600},{\"startTimeMs\":38400,\"endTimeMs\":39400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/be15d6806e9f4bcfa2ac8e956e32d32b-1526988340706.m3u8\",\"clips\":[{\"startTimeMs\":2300,\"endTimeMs\":3300},{\"startTimeMs\":4600,\"endTimeMs\":5600},{\"startTimeMs\":6900,\"endTimeMs\":7900},{\"startTimeMs\":9200,\"endTimeMs\":10200},{\"startTimeMs\":11500,\"endTimeMs\":12500},{\"startTimeMs\":13800,\"endTimeMs\":14800},{\"startTimeMs\":16100,\"endTimeMs\":17100},{\"startTimeMs\":18400,\"endTimeMs\":19400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/ad17e9713fcf403fadbd331427cf89dc-1526988265705.m3u8\",\"clips\":[{\"startTimeMs\":9500,\"endTimeMs\":10500},{\"startTimeMs\":19000,\"endTimeMs\":20000},{\"startTimeMs\":28500,\"endTimeMs\":29500},{\"startTimeMs\":38000,\"endTimeMs\":39000},{\"startTimeMs\":47500,\"endTimeMs\":48500},{\"startTimeMs\":57000,\"endTimeMs\":58000},{\"startTimeMs\":66500,\"endTimeMs\":67500},{\"startTimeMs\":76000,\"endTimeMs\":77000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/33677f3b1a5b4e8d92264cd817a9ba65-1526988522619.m3u8\",\"clips\":[{\"startTimeMs\":15900,\"endTimeMs\":16900},{\"startTimeMs\":31800,\"endTimeMs\":32800},{\"startTimeMs\":47700,\"endTimeMs\":48700},{\"startTimeMs\":63600,\"endTimeMs\":64600},{\"startTimeMs\":79500,\"endTimeMs\":80500},{\"startTimeMs\":95400,\"endTimeMs\":96400},{\"startTimeMs\":111300,\"endTimeMs\":112300},{\"startTimeMs\":127200,\"endTimeMs\":128200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/55240980048345df85c7a0a0d43337e6-1526988493547.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/08d3d569135c445198aa6efbf13c7b2b-1526988558963.m3u8\",\"clips\":[{\"startTimeMs\":7800,\"endTimeMs\":8800},{\"startTimeMs\":15600,\"endTimeMs\":16600},{\"startTimeMs\":23400,\"endTimeMs\":24400},{\"startTimeMs\":31200,\"endTimeMs\":32200},{\"startTimeMs\":39000,\"endTimeMs\":40000},{\"startTimeMs\":46800,\"endTimeMs\":47800},{\"startTimeMs\":54600,\"endTimeMs\":55600},{\"startTimeMs\":62400,\"endTimeMs\":63400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3cd59c6af90b47a1b66e93587f998eb5-1526988984023.m3u8\",\"clips\":[{\"startTimeMs\":7200,\"endTimeMs\":8200},{\"startTimeMs\":14400,\"endTimeMs\":15400},{\"startTimeMs\":21600,\"endTimeMs\":22600},{\"startTimeMs\":28800,\"endTimeMs\":29800},{\"startTimeMs\":36000,\"endTimeMs\":37000},{\"startTimeMs\":43200,\"endTimeMs\":44200},{\"startTimeMs\":50400,\"endTimeMs\":51400},{\"startTimeMs\":57600,\"endTimeMs\":58600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/dcb974c77c3e45d09b245685d4e48345-1526989422956.m3u8\",\"clips\":[{\"startTimeMs\":9900,\"endTimeMs\":10900},{\"startTimeMs\":19800,\"endTimeMs\":20800},{\"startTimeMs\":29700,\"endTimeMs\":30700},{\"startTimeMs\":39600,\"endTimeMs\":40600},{\"startTimeMs\":49500,\"endTimeMs\":50500},{\"startTimeMs\":59400,\"endTimeMs\":60400},{\"startTimeMs\":69300,\"endTimeMs\":70300},{\"startTimeMs\":79200,\"endTimeMs\":80200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/1f80f6a300974866a0aaac4296044d87-1526989164138.m3u8\",\"clips\":[{\"startTimeMs\":4600,\"endTimeMs\":5600},{\"startTimeMs\":9200,\"endTimeMs\":10200},{\"startTimeMs\":13800,\"endTimeMs\":14800},{\"startTimeMs\":18400,\"endTimeMs\":19400},{\"startTimeMs\":23000,\"endTimeMs\":24000},{\"startTimeMs\":27600,\"endTimeMs\":28600},{\"startTimeMs\":32200,\"endTimeMs\":33200},{\"startTimeMs\":36800,\"endTimeMs\":37800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/67de6931133347c8b7cdab69096cb0de-1526989623781.m3u8\",\"clips\":[{\"startTimeMs\":9900,\"endTimeMs\":10900},{\"startTimeMs\":19800,\"endTimeMs\":20800},{\"startTimeMs\":29700,\"endTimeMs\":30700},{\"startTimeMs\":39600,\"endTimeMs\":40600},{\"startTimeMs\":49500,\"endTimeMs\":50500},{\"startTimeMs\":59400,\"endTimeMs\":60400},{\"startTimeMs\":69300,\"endTimeMs\":70300},{\"startTimeMs\":79200,\"endTimeMs\":80200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/679a85ee249e43f2bc84d51400681b11-1526989549440.m3u8\",\"clips\":[{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":16000,\"endTimeMs\":17000},{\"startTimeMs\":20000,\"endTimeMs\":21000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":28000,\"endTimeMs\":29000},{\"startTimeMs\":32000,\"endTimeMs\":33000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/2ee7a54bdebc4c17a886e8d2fee51644-1526990044890.m3u8\",\"clips\":[{\"startTimeMs\":13100,\"endTimeMs\":14100},{\"startTimeMs\":26200,\"endTimeMs\":27200},{\"startTimeMs\":39300,\"endTimeMs\":40300},{\"startTimeMs\":52400,\"endTimeMs\":53400},{\"startTimeMs\":65500,\"endTimeMs\":66500},{\"startTimeMs\":78600,\"endTimeMs\":79600},{\"startTimeMs\":91700,\"endTimeMs\":92700},{\"startTimeMs\":104800,\"endTimeMs\":105800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/9f1f050669f442cdbfbdccb569e4ee47-1526989649248.m3u8\",\"clips\":[{\"startTimeMs\":24700,\"endTimeMs\":25700},{\"startTimeMs\":49400,\"endTimeMs\":50400},{\"startTimeMs\":74100,\"endTimeMs\":75100},{\"startTimeMs\":98800,\"endTimeMs\":99800},{\"startTimeMs\":123500,\"endTimeMs\":124500},{\"startTimeMs\":148200,\"endTimeMs\":149200},{\"startTimeMs\":172900,\"endTimeMs\":173900},{\"startTimeMs\":197600,\"endTimeMs\":198600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/affad5409d89498594e70ea9a0aacd46-1526990170070.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/4a6630d84b00469c98769dc11780c3ca-1526990116824.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/95523743a80c400da9bfd445c20fb623-1526990299085.m3u8\",\"clips\":[{\"startTimeMs\":2000,\"endTimeMs\":3000},{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":14000,\"endTimeMs\":15000},{\"startTimeMs\":16000,\"endTimeMs\":17000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/488b10d4021f40928c0c85b624d449ea-1526990317980.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3bd8bb1e21c840108cafe6ccb6e2d63b-1526991014509.m3u8\",\"clips\":[{\"startTimeMs\":22600,\"endTimeMs\":23600},{\"startTimeMs\":45200,\"endTimeMs\":46200},{\"startTimeMs\":67800,\"endTimeMs\":68800},{\"startTimeMs\":90400,\"endTimeMs\":91400},{\"startTimeMs\":113000,\"endTimeMs\":114000},{\"startTimeMs\":135600,\"endTimeMs\":136600},{\"startTimeMs\":158200,\"endTimeMs\":159200},{\"startTimeMs\":180800,\"endTimeMs\":181800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/8c83d5cdc9dd4ed9ad06bf387cafa501-1526990764031.m3u8\",\"clips\":[{\"startTimeMs\":16100,\"endTimeMs\":17100},{\"startTimeMs\":32200,\"endTimeMs\":33200},{\"startTimeMs\":48300,\"endTimeMs\":49300},{\"startTimeMs\":64400,\"endTimeMs\":65400},{\"startTimeMs\":80500,\"endTimeMs\":81500},{\"startTimeMs\":96600,\"endTimeMs\":97600},{\"startTimeMs\":112700,\"endTimeMs\":113700},{\"startTimeMs\":128800,\"endTimeMs\":129800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/bfbef26deb664cefa93e93d411d265a6-1526991384571.m3u8\",\"clips\":[{\"startTimeMs\":3300,\"endTimeMs\":4300},{\"startTimeMs\":6600,\"endTimeMs\":7600},{\"startTimeMs\":9900,\"endTimeMs\":10900},{\"startTimeMs\":13200,\"endTimeMs\":14200},{\"startTimeMs\":16500,\"endTimeMs\":17500},{\"startTimeMs\":19800,\"endTimeMs\":20800},{\"startTimeMs\":23100,\"endTimeMs\":24100},{\"startTimeMs\":26400,\"endTimeMs\":27400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/5a94cb505d364103a904b0468e99d928-1526991781348.m3u8\",\"clips\":[{\"startTimeMs\":4200,\"endTimeMs\":5200},{\"startTimeMs\":8400,\"endTimeMs\":9400},{\"startTimeMs\":12600,\"endTimeMs\":13600},{\"startTimeMs\":16800,\"endTimeMs\":17800},{\"startTimeMs\":21000,\"endTimeMs\":22000},{\"startTimeMs\":25200,\"endTimeMs\":26200},{\"startTimeMs\":29400,\"endTimeMs\":30400},{\"startTimeMs\":33600,\"endTimeMs\":34600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/89c71e2080214ae1a5c18751ddea7d05-1526991748511.m3u8\",\"clips\":[{\"startTimeMs\":26100,\"endTimeMs\":27100},{\"startTimeMs\":52200,\"endTimeMs\":53200},{\"startTimeMs\":78300,\"endTimeMs\":79300},{\"startTimeMs\":104400,\"endTimeMs\":105400},{\"startTimeMs\":130500,\"endTimeMs\":131500},{\"startTimeMs\":156600,\"endTimeMs\":157600},{\"startTimeMs\":182700,\"endTimeMs\":183700},{\"startTimeMs\":208800,\"endTimeMs\":209800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/bf8fc085424a4dc493dd19cec6611409-1526991790940.m3u8\",\"clips\":[{\"startTimeMs\":5400,\"endTimeMs\":6400},{\"startTimeMs\":10800,\"endTimeMs\":11800},{\"startTimeMs\":16200,\"endTimeMs\":17200},{\"startTimeMs\":21600,\"endTimeMs\":22600},{\"startTimeMs\":27000,\"endTimeMs\":28000},{\"startTimeMs\":32400,\"endTimeMs\":33400},{\"startTimeMs\":37800,\"endTimeMs\":38800},{\"startTimeMs\":43200,\"endTimeMs\":44200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/deb10a3ccad7401eb63337d8b6b6d860-1526991881965.m3u8\",\"clips\":[{\"startTimeMs\":3800,\"endTimeMs\":4800},{\"startTimeMs\":7600,\"endTimeMs\":8600},{\"startTimeMs\":11400,\"endTimeMs\":12400},{\"startTimeMs\":15200,\"endTimeMs\":16200},{\"startTimeMs\":19000,\"endTimeMs\":20000},{\"startTimeMs\":22800,\"endTimeMs\":23800},{\"startTimeMs\":26600,\"endTimeMs\":27600},{\"startTimeMs\":30400,\"endTimeMs\":31400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/19d5f07bfb3f4f01b9fba6402b57e2c3-1526991876116.m3u8\",\"clips\":[{\"startTimeMs\":26100,\"endTimeMs\":27100},{\"startTimeMs\":52200,\"endTimeMs\":53200},{\"startTimeMs\":78300,\"endTimeMs\":79300},{\"startTimeMs\":104400,\"endTimeMs\":105400},{\"startTimeMs\":130500,\"endTimeMs\":131500},{\"startTimeMs\":156600,\"endTimeMs\":157600},{\"startTimeMs\":182700,\"endTimeMs\":183700},{\"startTimeMs\":208800,\"endTimeMs\":209800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/be0d850b2ef940aaa2bc81623288f447-1526992284861.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/9ddcc9ef9ce649f4af51c7bfae2ec613-1526992456615.m3u8\",\"clips\":[{\"startTimeMs\":8800,\"endTimeMs\":9800},{\"startTimeMs\":17600,\"endTimeMs\":18600},{\"startTimeMs\":26400,\"endTimeMs\":27400},{\"startTimeMs\":35200,\"endTimeMs\":36200},{\"startTimeMs\":44000,\"endTimeMs\":45000},{\"startTimeMs\":52800,\"endTimeMs\":53800},{\"startTimeMs\":61600,\"endTimeMs\":62600},{\"startTimeMs\":70400,\"endTimeMs\":71400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/f97eb1f0ef97477ca887842bdb418587-1526993182289.m3u8\",\"clips\":[{\"startTimeMs\":2100,\"endTimeMs\":3100},{\"startTimeMs\":4200,\"endTimeMs\":5200},{\"startTimeMs\":6300,\"endTimeMs\":7300},{\"startTimeMs\":8400,\"endTimeMs\":9400},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12600,\"endTimeMs\":13600},{\"startTimeMs\":14700,\"endTimeMs\":15700},{\"startTimeMs\":16800,\"endTimeMs\":17800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/548e76d944464ed1bdb24319f40e662b-1526993213204.m3u8\",\"clips\":[{\"startTimeMs\":6500,\"endTimeMs\":7500},{\"startTimeMs\":13000,\"endTimeMs\":14000},{\"startTimeMs\":19500,\"endTimeMs\":20500},{\"startTimeMs\":26000,\"endTimeMs\":27000},{\"startTimeMs\":32500,\"endTimeMs\":33500},{\"startTimeMs\":39000,\"endTimeMs\":40000},{\"startTimeMs\":45500,\"endTimeMs\":46500},{\"startTimeMs\":52000,\"endTimeMs\":53000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/e23fafaac7b842378b0db942df0d2452-1526994239628.m3u8\",\"clips\":[{\"startTimeMs\":4200,\"endTimeMs\":5200},{\"startTimeMs\":8400,\"endTimeMs\":9400},{\"startTimeMs\":12600,\"endTimeMs\":13600},{\"startTimeMs\":16800,\"endTimeMs\":17800},{\"startTimeMs\":21000,\"endTimeMs\":22000},{\"startTimeMs\":25200,\"endTimeMs\":26200},{\"startTimeMs\":29400,\"endTimeMs\":30400},{\"startTimeMs\":33600,\"endTimeMs\":34600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/511763e97edb463788c0c638b63055a4-1526994104979.m3u8\",\"clips\":[{\"startTimeMs\":2900,\"endTimeMs\":3900},{\"startTimeMs\":5800,\"endTimeMs\":6800},{\"startTimeMs\":8700,\"endTimeMs\":9700},{\"startTimeMs\":11600,\"endTimeMs\":12600},{\"startTimeMs\":14500,\"endTimeMs\":15500},{\"startTimeMs\":17400,\"endTimeMs\":18400},{\"startTimeMs\":20300,\"endTimeMs\":21300},{\"startTimeMs\":23200,\"endTimeMs\":24200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/7ea3096e5ace40c48eb131d80c979ed6-1526994238918.m3u8\",\"clips\":[{\"startTimeMs\":5900,\"endTimeMs\":6900},{\"startTimeMs\":11800,\"endTimeMs\":12800},{\"startTimeMs\":17700,\"endTimeMs\":18700},{\"startTimeMs\":23600,\"endTimeMs\":24600},{\"startTimeMs\":29500,\"endTimeMs\":30500},{\"startTimeMs\":35400,\"endTimeMs\":36400},{\"startTimeMs\":41300,\"endTimeMs\":42300},{\"startTimeMs\":47200,\"endTimeMs\":48200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/7ba85e1a26a74fe4bde87907eca88386-1526993785846.m3u8\",\"clips\":[{\"startTimeMs\":699500,\"endTimeMs\":700500},{\"startTimeMs\":1399000,\"endTimeMs\":1400000},{\"startTimeMs\":2098500,\"endTimeMs\":2099500},{\"startTimeMs\":2798000,\"endTimeMs\":2799000},{\"startTimeMs\":3497500,\"endTimeMs\":3498500},{\"startTimeMs\":4197000,\"endTimeMs\":4198000},{\"startTimeMs\":4896500,\"endTimeMs\":4897500},{\"startTimeMs\":5596000,\"endTimeMs\":5597000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/8ec1e38d466a4f429482bd9b4f0b4218-1526994372257.m3u8\",\"clips\":[{\"startTimeMs\":21100,\"endTimeMs\":22100},{\"startTimeMs\":42200,\"endTimeMs\":43200},{\"startTimeMs\":63300,\"endTimeMs\":64300},{\"startTimeMs\":84400,\"endTimeMs\":85400},{\"startTimeMs\":105500,\"endTimeMs\":106500},{\"startTimeMs\":126600,\"endTimeMs\":127600},{\"startTimeMs\":147700,\"endTimeMs\":148700},{\"startTimeMs\":168800,\"endTimeMs\":169800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/f3f3906653ea4d41a33103f82803ec40-1526993846352.m3u8\",\"clips\":[{\"startTimeMs\":50400,\"endTimeMs\":51400},{\"startTimeMs\":100800,\"endTimeMs\":101800},{\"startTimeMs\":151200,\"endTimeMs\":152200},{\"startTimeMs\":201600,\"endTimeMs\":202600},{\"startTimeMs\":252000,\"endTimeMs\":253000},{\"startTimeMs\":302400,\"endTimeMs\":303400},{\"startTimeMs\":352800,\"endTimeMs\":353800},{\"startTimeMs\":403200,\"endTimeMs\":404200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/57c0912e081443a0b7bed121ca538562-1526995103997.m3u8\",\"clips\":[{\"startTimeMs\":11300,\"endTimeMs\":12300},{\"startTimeMs\":22600,\"endTimeMs\":23600},{\"startTimeMs\":33900,\"endTimeMs\":34900},{\"startTimeMs\":45200,\"endTimeMs\":46200},{\"startTimeMs\":56500,\"endTimeMs\":57500},{\"startTimeMs\":67800,\"endTimeMs\":68800},{\"startTimeMs\":79100,\"endTimeMs\":80100},{\"startTimeMs\":90400,\"endTimeMs\":91400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/1312a5f720b04b148370cc4cd6d311b2-1526995285646.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/20078673caa7455aa72a1a9287149494-1526995352785.m3u8\",\"clips\":[{\"startTimeMs\":7400,\"endTimeMs\":8400},{\"startTimeMs\":14800,\"endTimeMs\":15800},{\"startTimeMs\":22200,\"endTimeMs\":23200},{\"startTimeMs\":29600,\"endTimeMs\":30600},{\"startTimeMs\":37000,\"endTimeMs\":38000},{\"startTimeMs\":44400,\"endTimeMs\":45400},{\"startTimeMs\":51800,\"endTimeMs\":52800},{\"startTimeMs\":59200,\"endTimeMs\":60200}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/21898d2beb204c3a8e62bca7da29176f-1526995792272.m3u8\",\"clips\":[{\"startTimeMs\":2000,\"endTimeMs\":3000},{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":14000,\"endTimeMs\":15000},{\"startTimeMs\":16000,\"endTimeMs\":17000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/2a7976287604440fb27a7a8486a6d52a-1526995636178.m3u8\",\"clips\":[{\"startTimeMs\":7700,\"endTimeMs\":8700},{\"startTimeMs\":15400,\"endTimeMs\":16400},{\"startTimeMs\":23100,\"endTimeMs\":24100},{\"startTimeMs\":30800,\"endTimeMs\":31800},{\"startTimeMs\":38500,\"endTimeMs\":39500},{\"startTimeMs\":46200,\"endTimeMs\":47200},{\"startTimeMs\":53900,\"endTimeMs\":54900},{\"startTimeMs\":61600,\"endTimeMs\":62600}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/4bdacafb4690454f865462a044c8a629-1526996055275.m3u8\",\"clips\":[{\"startTimeMs\":3100,\"endTimeMs\":4100},{\"startTimeMs\":6200,\"endTimeMs\":7200},{\"startTimeMs\":9300,\"endTimeMs\":10300},{\"startTimeMs\":12400,\"endTimeMs\":13400},{\"startTimeMs\":15500,\"endTimeMs\":16500},{\"startTimeMs\":18600,\"endTimeMs\":19600},{\"startTimeMs\":21700,\"endTimeMs\":22700},{\"startTimeMs\":24800,\"endTimeMs\":25800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/b6804d66a0814fc99bc2ae46d36b8eed-1526996907611.m3u8\",\"clips\":[{\"startTimeMs\":1300,\"endTimeMs\":2300},{\"startTimeMs\":2600,\"endTimeMs\":3600},{\"startTimeMs\":3900,\"endTimeMs\":4900},{\"startTimeMs\":5200,\"endTimeMs\":6200},{\"startTimeMs\":6500,\"endTimeMs\":7500},{\"startTimeMs\":7800,\"endTimeMs\":8800},{\"startTimeMs\":9100,\"endTimeMs\":10100},{\"startTimeMs\":10400,\"endTimeMs\":11400}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/360c9192009445cfa48de5b4512d0dca-1526996926551.m3u8\",\"clips\":[{\"startTimeMs\":1500,\"endTimeMs\":2500},{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":4500,\"endTimeMs\":5500},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":7500,\"endTimeMs\":8500},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":10500,\"endTimeMs\":11500},{\"startTimeMs\":12000,\"endTimeMs\":13000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/5059a26c683b4549924846cc682fa0a7-1526997037589.m3u8\",\"clips\":[{\"startTimeMs\":7000,\"endTimeMs\":8000},{\"startTimeMs\":14000,\"endTimeMs\":15000},{\"startTimeMs\":21000,\"endTimeMs\":22000},{\"startTimeMs\":28000,\"endTimeMs\":29000},{\"startTimeMs\":35000,\"endTimeMs\":36000},{\"startTimeMs\":42000,\"endTimeMs\":43000},{\"startTimeMs\":49000,\"endTimeMs\":50000},{\"startTimeMs\":56000,\"endTimeMs\":57000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/74c310fff19e4d169220b81a3610a8d3-1526996956903.m3u8\",\"clips\":[{\"startTimeMs\":7000,\"endTimeMs\":8000},{\"startTimeMs\":14000,\"endTimeMs\":15000},{\"startTimeMs\":21000,\"endTimeMs\":22000},{\"startTimeMs\":28000,\"endTimeMs\":29000},{\"startTimeMs\":35000,\"endTimeMs\":36000},{\"startTimeMs\":42000,\"endTimeMs\":43000},{\"startTimeMs\":49000,\"endTimeMs\":50000},{\"startTimeMs\":56000,\"endTimeMs\":57000}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/5b862c9c496d44c6b6f268ea5c980aa9-1526997243870.m3u8\",\"clips\":[{\"startTimeMs\":19600,\"endTimeMs\":20600},{\"startTimeMs\":39200,\"endTimeMs\":40200},{\"startTimeMs\":58800,\"endTimeMs\":59800},{\"startTimeMs\":78400,\"endTimeMs\":79400},{\"startTimeMs\":98000,\"endTimeMs\":99000},{\"startTimeMs\":117600,\"endTimeMs\":118600},{\"startTimeMs\":137200,\"endTimeMs\":138200},{\"startTimeMs\":156800,\"endTimeMs\":157800}]}\n",
-            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/8876dea5f0384d1a9a6236a120f589b8-1526998089451.m3u8\",\"clips\":[{\"startTimeMs\":4300,\"endTimeMs\":5300},{\"startTimeMs\":8600,\"endTimeMs\":9600},{\"startTimeMs\":12900,\"endTimeMs\":13900},{\"startTimeMs\":17200,\"endTimeMs\":18200},{\"startTimeMs\":21500,\"endTimeMs\":22500},{\"startTimeMs\":25800,\"endTimeMs\":26800},{\"startTimeMs\":30100,\"endTimeMs\":31100},{\"startTimeMs\":34400,\"endTimeMs\":35400}]}"
+            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/vpc/20220406/18066780OzQx1yXknalwXP43Yb.mp4\",\"clips\":[{\"startTimeMs\":19600,\"endTimeMs\":20600},{\"startTimeMs\":39200,\"endTimeMs\":40200},{\"startTimeMs\":58800,\"endTimeMs\":59800},{\"startTimeMs\":78400,\"endTimeMs\":79400},{\"startTimeMs\":98000,\"endTimeMs\":99000},{\"startTimeMs\":117600,\"endTimeMs\":118600},{\"startTimeMs\":137200,\"endTimeMs\":138200},{\"startTimeMs\":156800,\"endTimeMs\":157800}]}\n",
+            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/vpc/20220406/18066780OzQx1yXknalwXP43Yb.mp4\",\"clips\":[{\"startTimeMs\":17600,\"endTimeMs\":18600},{\"startTimeMs\":39200,\"endTimeMs\":40200},{\"startTimeMs\":58800,\"endTimeMs\":59800},{\"startTimeMs\":78400,\"endTimeMs\":79400},{\"startTimeMs\":98000,\"endTimeMs\":99000},{\"startTimeMs\":117600,\"endTimeMs\":118600},{\"startTimeMs\":137200,\"endTimeMs\":138200},{\"startTimeMs\":156800,\"endTimeMs\":157800}]}\n",
+//            "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/vpc/20220406/21749322YteIIMdBPThlzRUk95.mp4\",\"clips\":[{\"startTimeMs\":4300,\"endTimeMs\":5300},{\"startTimeMs\":8600,\"endTimeMs\":9600},{\"startTimeMs\":12900,\"endTimeMs\":13900},{\"startTimeMs\":17200,\"endTimeMs\":18200},{\"startTimeMs\":21500,\"endTimeMs\":22500},{\"startTimeMs\":25800,\"endTimeMs\":26800},{\"startTimeMs\":30100,\"endTimeMs\":31100},{\"startTimeMs\":34400,\"endTimeMs\":35400}]}"
     };
 
     public static void main(String[] args) {
@@ -118,6 +38,16 @@ public class OpenCVImageBlurTest {
             e.printStackTrace();
             return;
         }
+
+
+        if (TEST_COMPARE) {
+            String src = PQCVMediaProcessor.getVideoSimilarityLists(sVIS[0]);
+            String src2 = PQCVMediaProcessor.getVideoSimilarityLists(sVIS[1]);
+            float v = PQCVMediaProcessor.getVideoSimilarityValue(src, src2);
+            System.out.println("相似值 = " + v);
+            return;
+        }
+
         ExecutorService executorService = Executors.newFixedThreadPool(thread_counts);
         for (int j = 0; j < loop_counts; j++) {
             long startTime = System.currentTimeMillis();

+ 13 - 3
jni/ImageBlurDetection.cpp

@@ -90,6 +90,15 @@ static jint Java_JNI_OpenCV_ImagePathBlurDetection(JNIEnv *env, jobject obj, jst
     return ret;
 }
 
+static jfloat Java_JNI_OpenCV_GetVideoSimilarityValue(JNIEnv *env, jobject obj, jstring src, jstring src1) {
+    const char *native_src1 = env->GetStringUTFChars(src, 0);
+    const char *native_src2 = env->GetStringUTFChars(src1, 0);
+    jfloat v = get_video_similarity_value(native_src1, native_src2);
+    env->ReleaseStringUTFChars(src, native_src1);
+    env->ReleaseStringUTFChars(src1, native_src2);
+    return v;
+}
+
 static jstring Java_JNI_OpenCV_GetVideoSimilarityLists(JNIEnv *env, jobject obj, jstring filepath) {
     LOGE("Java_JNI_OpenCV_GetVideoSimilarityLists\n ");
     const char *image_path = env->GetStringUTFChars(filepath, 0);
@@ -118,9 +127,10 @@ Java_JNI_OpenCV_ImageBytesBlurDetection(JNIEnv *env, jobject obj, jbyteArray dat
 
 
 static const JNINativeMethod configMethods[] = {
-        {"blurDetectionFromImagePath",  "(Ljava/lang/String;)I",                 (void **) Java_JNI_OpenCV_ImagePathBlurDetection},
-        {"blurDetectionFromImageBytes", "([B)I",                                 (void **) Java_JNI_OpenCV_ImageBytesBlurDetection},
-        {"getVideoSimilarityLists",     "(Ljava/lang/String;)Ljava/lang/String;", (void **) Java_JNI_OpenCV_GetVideoSimilarityLists},
+        {"blurDetectionFromImagePath",  "(Ljava/lang/String;)I",                   (void **) Java_JNI_OpenCV_ImagePathBlurDetection},
+        {"blurDetectionFromImageBytes", "([B)I",                                   (void **) Java_JNI_OpenCV_ImageBytesBlurDetection},
+        {"getVideoSimilarityLists",     "(Ljava/lang/String;)Ljava/lang/String;",  (void **) Java_JNI_OpenCV_GetVideoSimilarityLists},
+        {"getVideoSimilarityValue",     "(Ljava/lang/String;Ljava/lang/String;)F", (void **) Java_JNI_OpenCV_GetVideoSimilarityValue},
 };
 
 

二進制
output/jar/libpq-cv-media-22.4.6.jar


二進制
output/jar/libpq-cv-media.jar


+ 1 - 0
src/opencv/image_fingerprint.cpp

@@ -181,6 +181,7 @@ int fingerprintFromFFAVFrameV2(FILE *file, AVFrame *frame, char buf[64]) {
 
 
 float fingerprint_compare(const char *arr, const char *arr2, int len) {
+    if (!arr || !arr2)return 0.0;
     int size = len;
     int sim_sum = 0;
     for (int i = 0; i < size; ++i) {

+ 81 - 1
src/utils/video_similarity.cpp

@@ -48,6 +48,7 @@ int video_similarity_detection_start(long id, int force_keyframe,
     dctx->vs_decodes = *lists;
     int index = 0;
     auto endTimeMs = (*lists)[index]->endTimeMs;
+    auto startTimeMs = (*lists)[index]->startTimeMs;
     while (!exit) {
         AVFrame *video_frame = NULL;
         dctx->video_queue->PopFront(video_frame);
@@ -82,7 +83,9 @@ int video_similarity_detection_start(long id, int force_keyframe,
             }
             append_array.append("\0");
             memcpy((char *) model->image_hash, append_array.c_str(), strlen(append_array.c_str()));
-            if (video_frame->pts >= endTimeMs && (*lists).size() > 1 && index + 1 < (*lists).size()) {
+
+            if ((video_frame->pts >= endTimeMs ) && (*lists).size() > 1 &&
+                index + 1 < (*lists).size()) {
                 index++;
                 endTimeMs = (*lists)[index]->endTimeMs;
             }
@@ -134,6 +137,17 @@ VideoSimilarity *json2VideoSimilarity(const char *json) {
                 memset(videoSim, 0, sizeof(VideoSimilarityModel));
                 videoSim->startTimeMs = json_obj["clips"][i]["startTimeMs"].asInt();
                 videoSim->endTimeMs = json_obj["clips"][i]["endTimeMs"].asInt();
+                if (json_obj["clips"][i].isMember("hashs") &&
+                    json_obj["clips"][i]["hashs"].type() == Json::arrayValue) {
+                    for (int j = 0; j < json_obj["clips"][i]["hashs"].size(); ++j) {
+                        if (json_obj["clips"][i]["hashs"][j].isMember("imageHash")) {
+                            auto *vi = (ImageHashModel *) malloc(sizeof(ImageHashModel));
+                            memset(vi, 0, sizeof(ImageHashModel));
+                            vi->image_hash = strdup(json_obj["clips"][i]["hashs"][j]["imageHash"].asString().c_str());
+                            videoSim->hashs.push_back(vi);
+                        }
+                    }
+                }
                 videoSimilarity->clips.push_back(videoSim);
             }
         }
@@ -242,3 +256,69 @@ const char *get_video_similarity_list(const char *inputjson) {
     }
     return ret_json;
 }
+
+static int *list_sim_compare(std::vector<ImageHashModel *> a, std::vector<ImageHashModel *> b) {
+    int minFrames = MIN(a.size(), b.size());
+    int maxFrames = MAX(a.size(), b.size());
+    int sim_frame_count = 0;
+    int arr[2];
+    //比较帧指纹
+    for (int k = 0; k < minFrames; ++k) {
+        float v_sim = fingerprint_compare(a[k]->image_hash, b[k]->image_hash,
+                                          minFrames);
+        if (v_sim > 0.90) {
+            sim_frame_count++;
+        }
+    }
+    arr[0] = sim_frame_count;
+    arr[1] = maxFrames;
+    return arr;
+}
+
+float get_video_similarity_value(const char *src_json, const char *dst_json) {
+    if (!src_json || !dst_json) {
+        return 0.0f;
+    }
+    auto *src_vs = json2VideoSimilarity(src_json);
+    auto *dst_vs = json2VideoSimilarity(dst_json);
+    int min_count = MIN(src_vs->clips.size(), dst_vs->clips.size());
+    int src_v_count = 0;
+    int dst_v_count = 0;
+    for (int g = 0; g < min_count; ++g) {
+        int *cur_sim = list_sim_compare(src_vs->clips[g]->hashs, dst_vs->clips[g]->hashs);
+        int a = cur_sim[0];
+        int b = cur_sim[1];
+        src_v_count += a;
+        dst_v_count += b;
+    }
+    float sim_value = (float) src_v_count / MAX(1.0, (float) dst_v_count);
+    if (src_vs)
+        videoSimilarityFree(&src_vs);
+    if (dst_vs)
+        videoSimilarityFree(&dst_vs);
+    src_vs = NULL;
+    dst_vs = NULL;
+    return sim_value;
+}
+
+void videoSimilarityFree(VideoSimilarity **videoSimilarity) {
+    if (!*videoSimilarity)return;
+    for (const auto &item : (*videoSimilarity)->clips) {
+        if (item) {
+            for (const auto &hs_item : item->hashs) {
+                if (hs_item) {
+                    if (hs_item->image_hash) {
+                        free(hs_item->image_hash);
+                        hs_item->image_hash = NULL;
+                    }
+                    free(hs_item);
+                }
+            }
+            item->hashs.shrink_to_fit();
+            item->hashs.clear();
+            free(item);
+        }
+    }
+    free(*videoSimilarity);
+    *videoSimilarity = NULL;
+}

+ 3 - 0
src/utils/video_similarity.h

@@ -34,6 +34,7 @@ typedef struct VideoSimilarityContext {
 VideoSimilarity *json2VideoSimilarity(const char *json);
 
 const char *videoSimilarity2json(VideoSimilarity *videoSimilarity);
+void videoSimilarityFree(VideoSimilarity **videoSimilarity);
 
 /**
  * 视频相似检测初始化
@@ -61,4 +62,6 @@ int video_similarity_detection_close(long id);
 
 const char * get_video_similarity_list(const char * inputfile);
 
+float get_video_similarity_value(const char *src_json,const char *dst_json);
+
 #endif //BYTESFLOW_OPENCV_MEDIA_VIDEO_SIMILARITY_H

+ 111 - 103
src/video_similarity_comparison.cpp

@@ -37,34 +37,42 @@ static void *run_thread(void *p) {
 }
 
 
-static int *list_sim_compare(std::vector<ImageHashModel *> a, std::vector<ImageHashModel *> b) {
-    int minFrames = MIN(a.size(), b.size());
-    int maxFrames = MAX(a.size(), b.size());
-    int sim_frame_count = 0;
-    int arr[2];
-    //比较帧指纹
-    for (int k = 0; k < minFrames; ++k) {
-        float v_sim = fingerprint_compare(a[k]->image_hash, b[k]->image_hash,
-                                          minFrames);
-        if (v_sim > 0.90) {
-            sim_frame_count++;
-        }
-    }
-    arr[0] = sim_frame_count;
-    arr[1] = maxFrames;
-    return arr;
-}
+
 
 typedef struct Test {
     const char *input;
     CountDownLatch *countDownLatch;
 };
 
+
+
 static void *run(void *p) {
     auto *test = (Test *) p;
-    const char *ret_json = get_video_similarity_list(test->input);
-    printf("ret_json=%s\n", ret_json);
+    const char * test_1 =  "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/vpc/20220406/18066780OzQx1yXknalwXP43Yb.mp4\",\"clips\":[{\"startTimeMs\":19600,\"endTimeMs\":20600},{\"startTimeMs\":39200,\"endTimeMs\":40200},{\"startTimeMs\":58800,\"endTimeMs\":59800},{\"startTimeMs\":78400,\"endTimeMs\":79400},{\"startTimeMs\":98000,\"endTimeMs\":99000},{\"startTimeMs\":117600,\"endTimeMs\":118600},{\"startTimeMs\":137200,\"endTimeMs\":138200},{\"startTimeMs\":156800,\"endTimeMs\":157800}]}\n";
+    const char * test_2 =  "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/vpc/20220406/18066780OzQx1yXknalwXP43Yb.mp4\",\"clips\":[{\"startTimeMs\":20600,\"endTimeMs\":21600},{\"startTimeMs\":39200,\"endTimeMs\":40200},{\"startTimeMs\":58800,\"endTimeMs\":59800},{\"startTimeMs\":78400,\"endTimeMs\":79400},{\"startTimeMs\":98000,\"endTimeMs\":99000},{\"startTimeMs\":117600,\"endTimeMs\":118600},{\"startTimeMs\":137200,\"endTimeMs\":138200},{\"startTimeMs\":156800,\"endTimeMs\":157800}]}";
+//    const char *ret_json = get_video_similarity_list(test->input);
+    const char *ret_json = get_video_similarity_list(test_1);
+    const char *ret_json2 = get_video_similarity_list(test_2);
+//    printf("ret_json=%s\n", ret_json);
+    printf("相似值为:%f \n",get_video_similarity_value(ret_json,ret_json2));
     test->countDownLatch->countDown();
+//    MD5_CTX md5c;
+//    MD5Init(&md5c); //初始化
+//    unsigned char decrypt[16] = {0};
+//    unsigned char decrypt32[32] = {0};
+//    size_t read_len = strlen(ret_json);
+//    MD5Update(&md5c, (unsigned char *) ret_json, read_len);
+//    MD5Final(&md5c, decrypt);
+//    char temp[8]={0};
+//    strcpy((char *) decrypt32, "");
+//    for (int i = 0; i < 16; i++) {
+//        sprintf(temp, "%02x", decrypt[i]);
+//        strcat((char *) decrypt32, temp);
+//    }
+//    printf("md5:%s\n", decrypt32);
+//
+//    char * dejson = "35070e4651614cced5604e93c4a59ff9";
+
     free(test);
     pthread_exit(NULL);
 }
@@ -83,21 +91,21 @@ int main(int argc, char *argv[]) {
     int threads = 1;
     const char *inputs[1];
 //    inputs[0] =  "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/b46fd76f98364b3abad8c1297a868f82-1526976612340.m3u8\",\"clips\":[{\"startTimeMs\":3000,\"endTimeMs\":4000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":9000,\"endTimeMs\":10000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":15000,\"endTimeMs\":16000},{\"startTimeMs\":18000,\"endTimeMs\":19000},{\"startTimeMs\":21000,\"endTimeMs\":22000},{\"startTimeMs\":24000,\"endTimeMs\":25000}]}";
-    inputs[0] = "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/020384682f444a9c86ce2613d01b2cf1_1528433642881.m3u8\",\"clips\":[{\"startTimeMs\":5900,\"endTimeMs\":6900},{\"startTimeMs\":11800,\"endTimeMs\":12800},{\"startTimeMs\":17700,\"endTimeMs\":18700},{\"startTimeMs\":23600,\"endTimeMs\":24600},{\"startTimeMs\":29500,\"endTimeMs\":30500},{\"startTimeMs\":35400,\"endTimeMs\":36400},{\"startTimeMs\":41300,\"endTimeMs\":42300},{\"startTimeMs\":47200,\"endTimeMs\":48200}]}";
-//    inputs[2] = "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3dbf36e8ec27479581514b8b7b4c8034-1526924772832-safe1594892815.m3u8\",\"clips\":[{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":18000,\"endTimeMs\":19000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":30000,\"endTimeMs\":31000},{\"startTimeMs\":36000,\"endTimeMs\":37000},{\"startTimeMs\":42000,\"endTimeMs\":43000},{\"startTimeMs\":48000,\"endTimeMs\":49000}]}";
+//    inputs[0] = "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/6b2efb8d1c6f4095a90b0b276d4b3a291532088309923.m3u8\",\"clips\":[{\"startTimeMs\":500,\"endTimeMs\":1000},{\"startTimeMs\":1000,\"endTimeMs\":1500},{\"startTimeMs\":1500,\"endTimeMs\":2000},{\"startTimeMs\":2000,\"endTimeMs\":2500},{\"startTimeMs\":2500,\"endTimeMs\":3000},{\"startTimeMs\":3000,\"endTimeMs\":3500},{\"startTimeMs\":3500,\"endTimeMs\":4000},{\"startTimeMs\":4000,\"endTimeMs\":4500}]}";
+    inputs[0] = "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3dbf36e8ec27479581514b8b7b4c8034-1526924772832-safe1594892815.m3u8\",\"clips\":[{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":18000,\"endTimeMs\":19000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":30000,\"endTimeMs\":31000},{\"startTimeMs\":36000,\"endTimeMs\":37000},{\"startTimeMs\":42000,\"endTimeMs\":43000},{\"startTimeMs\":48000,\"endTimeMs\":49000}]}";
 //    inputs[3] = "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/3dbf36e8ec27479581514b8b7b4c8034-1526924772832-safe1594892815.m3u8\",\"clips\":[{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":18000,\"endTimeMs\":19000},{\"startTimeMs\":24000,\"endTimeMs\":25000},{\"startTimeMs\":30000,\"endTimeMs\":31000},{\"startTimeMs\":36000,\"endTimeMs\":37000},{\"startTimeMs\":42000,\"endTimeMs\":43000},{\"startTimeMs\":48000,\"endTimeMs\":49000}]}";
 
 //    for (;;) {
-        CountDownLatch *countDownLatch = new CountDownLatch(threads);
-        for (int i = 0; i < threads; ++i) {
-            Test *test = static_cast<Test *>(malloc(sizeof(Test)));
-            test->countDownLatch = countDownLatch;
-            test->input = inputs[i];
-            pthread_t id;
-            pthread_create(&id,0,run,test);
-        }
-        countDownLatch->await();
-        delete countDownLatch;
+    CountDownLatch *countDownLatch = new CountDownLatch(threads);
+    for (int i = 0; i < threads; ++i) {
+        Test *test = static_cast<Test *>(malloc(sizeof(Test)));
+        test->countDownLatch = countDownLatch;
+        test->input = inputs[i];
+        pthread_t id;
+        pthread_create(&id, 0, run, test);
+    }
+    countDownLatch->await();
+    delete countDownLatch;
 //    }
     return 1;
 
@@ -119,27 +127,27 @@ int main(int argc, char *argv[]) {
 
 //    auto vs = json2VideoSimilarity(input_json);
 //    auto json = videoSimilarity2json(vs);
-
-    int32_t size = 7;
-    const char *filepath[size];
-    //票圈视频iOS客户端上传
-    filepath[0] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689Igao51Q0IMBYw8aNKH";
-    //ios 原生上传
-    filepath[1] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689VvI5KURrrxzlZ0Kcdv";
-    //iOS h5上传
-    filepath[2] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689iBy9WFswYdBNblY9au";
-    //票圈视频安卓客户端上传
-    filepath[3] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17677590exDXG6q75ELejK7aMY";
-    //安卓h5上传
-    filepath[4] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/176775906GoWtUCYoVZYDbO1XX";
-    //安卓原生上传
-    filepath[5] = "";
-    //PC 上传
-//    filepath[5] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689nSyGzifJFr4Apl0zc8";
-    filepath[5] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220310/701939000F0qpyCLetflI3COz";
-    http://rescdn.yishihui.com/longvideo/video/vpc/20220304/17938576TxEh0UJXpzcoYRJuHu
-    //本地 local 上传的视频
-    filepath[6] = "/Users/devyk/Data/Project/sample/github_code/OpenCVSample/temp/19581045gIiFKepxbbplF3XtsG.mp4";
+//
+//    int32_t size = 7;
+//    const char *filepath[size];
+//    //票圈视频iOS客户端上传
+//    filepath[0] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689Igao51Q0IMBYw8aNKH";
+//    //ios 原生上传
+//    filepath[1] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689VvI5KURrrxzlZ0Kcdv";
+//    //iOS h5上传
+//    filepath[2] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689iBy9WFswYdBNblY9au";
+//    //票圈视频安卓客户端上传
+//    filepath[3] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17677590exDXG6q75ELejK7aMY";
+//    //安卓h5上传
+//    filepath[4] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/176775906GoWtUCYoVZYDbO1XX";
+//    //安卓原生上传
+//    filepath[5] = "";
+//    //PC 上传
+////    filepath[5] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220309/17025689nSyGzifJFr4Apl0zc8";
+//    filepath[5] = "http://rescdn.yishihui.com/longvideo/video/vpc/20220310/701939000F0qpyCLetflI3COz";
+//    http://rescdn.yishihui.com/longvideo/video/vpc/20220304/17938576TxEh0UJXpzcoYRJuHu
+//    //本地 local 上传的视频
+//    filepath[6] = "/Users/devyk/Data/Project/sample/github_code/OpenCVSample/temp/19581045gIiFKepxbbplF3XtsG.mp4";
 
 //    run(vs->videoPath,&vs->clips);
 
@@ -148,57 +156,57 @@ int main(int argc, char *argv[]) {
 //    const char *local_url = "/Users/devyk/Data/Project/sample/github_code/OpenCVSample/temp/19581045gIiFKepxbbplF3XtsG.mp4";
 //    std::vector<VideoSimilarityModel *> local_list;
 //    run(local_url, &local_list);
-
-    std::vector<VideoSimilarityModel *> lists[size];
-    int split_count = 10;
-//    int total = 3960000;
-    int ii = 1000 * 60 * 6;
-
-    int start = ii;
-    for (int i = 0; i < size; ++i) {
-        auto start_time = getCurrentTimeMills();
-        start = ii;
-        for (int j = 0; j < split_count; ++j) {
-            if (j == 0 || j == split_count - 1) {
-                continue;
-            }
-            auto *item = new VideoSimilarityModel();
-            item->startTimeMs = start;
-            item->endTimeMs = item->startTimeMs + 1000;
-            lists[i].push_back(item);
-            start += ii;
-        }
-        LOGE(">>>filepath=%s \n", filepath[i]);
-        run(filepath[i], &lists[i]);
-        LOGE("<<<filepath=%s cost time=%lld \n", filepath[i], getCurrentTimeMills() - start_time);
-    }
-
-    //本地 local
-    std::vector<VideoSimilarityModel *> local = lists[size - 1];
-    //相似 hash 值
-    int test_vis[6][8] = {0};
-    //所有的 帧
-    int test_vis_total[6][8] = {0};
-    for (int j = 0; j < size - 1; ++j) {
-        for (int g = 0; g < lists[j].size(); ++g) {
-            int *cur_sim = list_sim_compare(local[g]->hashs, lists[j][g]->hashs);
-            int a = cur_sim[0];
-            int b = cur_sim[1];
-            test_vis[j][g] = a;
-            test_vis_total[j][g] = b;
-        }
-    }
-
-
-    for (int i = 0; i < size - 1; ++i) {
-        int a_t = 0, b_t = 0;
-        for (int j = 0; j < 8; ++j) {
-            a_t += test_vis[i][j];
-            b_t += test_vis_total[i][j];
-        }
-        LOGE("%s %s 相似度 = %f \n", filepath[6], filepath[i], a_t * 1.0 / b_t * 1.0);
-    }
-    printf("");
+//
+//    std::vector<VideoSimilarityModel *> lists[size];
+//    int split_count = 10;
+////    int total = 3960000;
+//    int ii = 1000 * 60 * 6;
+//
+//    int start = ii;
+//    for (int i = 0; i < size; ++i) {
+//        auto start_time = getCurrentTimeMills();
+//        start = ii;
+//        for (int j = 0; j < split_count; ++j) {
+//            if (j == 0 || j == split_count - 1) {
+//                continue;
+//            }
+//            auto *item = new VideoSimilarityModel();
+//            item->startTimeMs = start;
+//            item->endTimeMs = item->startTimeMs + 1000;
+//            lists[i].push_back(item);
+//            start += ii;
+//        }
+//        LOGE(">>>filepath=%s \n", filepath[i]);
+//        run(filepath[i], &lists[i]);
+//        LOGE("<<<filepath=%s cost time=%lld \n", filepath[i], getCurrentTimeMills() - start_time);
+//    }
+//
+//    //本地 local
+//    std::vector<VideoSimilarityModel *> local = lists[size - 1];
+//    //相似 hash 值
+//    int test_vis[6][8] = {0};
+//    //所有的 帧
+//    int test_vis_total[6][8] = {0};
+//    for (int j = 0; j < size - 1; ++j) {
+//        for (int g = 0; g < lists[j].size(); ++g) {
+//            int *cur_sim = list_sim_compare(local[g]->hashs, lists[j][g]->hashs);
+//            int a = cur_sim[0];
+//            int b = cur_sim[1];
+//            test_vis[j][g] = a;
+//            test_vis_total[j][g] = b;
+//        }
+//    }
+//
+//
+//    for (int i = 0; i < size - 1; ++i) {
+//        int a_t = 0, b_t = 0;
+//        for (int j = 0; j < 8; ++j) {
+//            a_t += test_vis[i][j];
+//            b_t += test_vis_total[i][j];
+//        }
+//        LOGE("%s %s 相似度 = %f \n", filepath[6], filepath[i], a_t * 1.0 / b_t * 1.0);
+//    }
+//    printf("");
 
     LOGE("end \n");
     return 0;