1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci
16da853ecaSopenharmony_ci#include "gtest/gtest.h"
17da853ecaSopenharmony_ci
18da853ecaSopenharmony_ci#include "native_avcodec_base.h"
19da853ecaSopenharmony_ci#include "native_avdemuxer.h"
20da853ecaSopenharmony_ci#include "native_avformat.h"
21da853ecaSopenharmony_ci#include "native_avsource.h"
22da853ecaSopenharmony_ci
23da853ecaSopenharmony_ci#include <iostream>
24da853ecaSopenharmony_ci#include <cstdio>
25da853ecaSopenharmony_ci#include <string>
26da853ecaSopenharmony_ci#include <fcntl.h>
27da853ecaSopenharmony_ci#include <thread>
28da853ecaSopenharmony_ci#include <securec.h>
29da853ecaSopenharmony_ci
30da853ecaSopenharmony_cinamespace OHOS {
31da853ecaSopenharmony_cinamespace Media {
32da853ecaSopenharmony_ciclass DemuxerReliNdkTest : public testing::Test {
33da853ecaSopenharmony_cipublic:
34da853ecaSopenharmony_ci    // SetUpTestCase: Called before all test cases
35da853ecaSopenharmony_ci    static void SetUpTestCase(void);
36da853ecaSopenharmony_ci    // TearDownTestCase: Called after all test case
37da853ecaSopenharmony_ci    static void TearDownTestCase(void);
38da853ecaSopenharmony_ci    // SetUp: Called before each test cases
39da853ecaSopenharmony_ci    void SetUp(void);
40da853ecaSopenharmony_ci    // TearDown: Called after each test cases
41da853ecaSopenharmony_ci    void TearDown(void);
42da853ecaSopenharmony_ci};
43da853ecaSopenharmony_ci
44da853ecaSopenharmony_cistatic OH_AVMemory *memory = nullptr;
45da853ecaSopenharmony_cistatic OH_AVSource *source = nullptr;
46da853ecaSopenharmony_cistatic OH_AVDemuxer *demuxer = nullptr;
47da853ecaSopenharmony_cistatic OH_AVFormat *sourceFormat = nullptr;
48da853ecaSopenharmony_cistatic OH_AVFormat *trackFormat = nullptr;
49da853ecaSopenharmony_ciconst char *URI2 = "http://192.168.3.11:8080/share/audio/AAC_48000_1.aac";
50da853ecaSopenharmony_ciconst char *URI1 = "http://192.168.3.11:8080/share/audio/MP3_48000_1.mp3";
51da853ecaSopenharmony_cistatic int32_t g_trackCount;
52da853ecaSopenharmony_cistatic int32_t g_width = 3840;
53da853ecaSopenharmony_cistatic int32_t g_height = 2160;
54da853ecaSopenharmony_cistatic int32_t g_maxThread = 16;
55da853ecaSopenharmony_ciOH_AVSource *source_list[16] = {};
56da853ecaSopenharmony_ciOH_AVMemory *memory_list[16] = {};
57da853ecaSopenharmony_ciOH_AVDemuxer *demuxer_list[16] = {};
58da853ecaSopenharmony_ciint g_fdList[16] = {};
59da853ecaSopenharmony_ciint32_t g_track = 2;
60da853ecaSopenharmony_ci
61da853ecaSopenharmony_civoid DemuxerReliNdkTest::SetUpTestCase() {}
62da853ecaSopenharmony_civoid DemuxerReliNdkTest::TearDownTestCase() {}
63da853ecaSopenharmony_civoid DemuxerReliNdkTest::SetUp()
64da853ecaSopenharmony_ci{
65da853ecaSopenharmony_ci    memory = OH_AVMemory_Create(g_width * g_height);
66da853ecaSopenharmony_ci    g_trackCount = 0;
67da853ecaSopenharmony_ci}
68da853ecaSopenharmony_civoid DemuxerReliNdkTest::TearDown()
69da853ecaSopenharmony_ci{
70da853ecaSopenharmony_ci    if (trackFormat != nullptr) {
71da853ecaSopenharmony_ci        OH_AVFormat_Destroy(trackFormat);
72da853ecaSopenharmony_ci        trackFormat = nullptr;
73da853ecaSopenharmony_ci    }
74da853ecaSopenharmony_ci
75da853ecaSopenharmony_ci    if (sourceFormat != nullptr) {
76da853ecaSopenharmony_ci        OH_AVFormat_Destroy(sourceFormat);
77da853ecaSopenharmony_ci        sourceFormat = nullptr;
78da853ecaSopenharmony_ci    }
79da853ecaSopenharmony_ci
80da853ecaSopenharmony_ci    if (memory != nullptr) {
81da853ecaSopenharmony_ci        OH_AVMemory_Destroy(memory);
82da853ecaSopenharmony_ci        memory = nullptr;
83da853ecaSopenharmony_ci    }
84da853ecaSopenharmony_ci    if (source != nullptr) {
85da853ecaSopenharmony_ci        OH_AVSource_Destroy(source);
86da853ecaSopenharmony_ci        source = nullptr;
87da853ecaSopenharmony_ci    }
88da853ecaSopenharmony_ci    if (demuxer != nullptr) {
89da853ecaSopenharmony_ci        OH_AVDemuxer_Destroy(demuxer);
90da853ecaSopenharmony_ci        demuxer = nullptr;
91da853ecaSopenharmony_ci    }
92da853ecaSopenharmony_ci
93da853ecaSopenharmony_ci    for (int i = 0; i < g_maxThread; i++) {
94da853ecaSopenharmony_ci        if (demuxer_list[i] != nullptr) {
95da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
96da853ecaSopenharmony_ci            demuxer_list[i] = nullptr;
97da853ecaSopenharmony_ci        }
98da853ecaSopenharmony_ci
99da853ecaSopenharmony_ci        if (source_list[i] != nullptr) {
100da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
101da853ecaSopenharmony_ci            source_list[i] = nullptr;
102da853ecaSopenharmony_ci        }
103da853ecaSopenharmony_ci        if (memory_list[i] != nullptr) {
104da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
105da853ecaSopenharmony_ci            memory_list[i] = nullptr;
106da853ecaSopenharmony_ci        }
107da853ecaSopenharmony_ci        std::cout << i << "            finish Destroy!!!!" << std::endl;
108da853ecaSopenharmony_ci
109da853ecaSopenharmony_ci        close(g_fdList[i]);
110da853ecaSopenharmony_ci    }
111da853ecaSopenharmony_ci}
112da853ecaSopenharmony_ci} // namespace Media
113da853ecaSopenharmony_ci} // namespace OHOS
114da853ecaSopenharmony_ci
115da853ecaSopenharmony_ciusing namespace std;
116da853ecaSopenharmony_ciusing namespace OHOS;
117da853ecaSopenharmony_ciusing namespace OHOS::Media;
118da853ecaSopenharmony_ciusing namespace testing::ext;
119da853ecaSopenharmony_cinamespace {
120da853ecaSopenharmony_cistatic int64_t GetFileSize(const char *fileName)
121da853ecaSopenharmony_ci{
122da853ecaSopenharmony_ci    int64_t fileSize = 0;
123da853ecaSopenharmony_ci    if (fileName != nullptr) {
124da853ecaSopenharmony_ci        struct stat fileStatus {};
125da853ecaSopenharmony_ci        if (stat(fileName, &fileStatus) == 0) {
126da853ecaSopenharmony_ci            fileSize = static_cast<int64_t>(fileStatus.st_size);
127da853ecaSopenharmony_ci        }
128da853ecaSopenharmony_ci    }
129da853ecaSopenharmony_ci    return fileSize;
130da853ecaSopenharmony_ci}
131da853ecaSopenharmony_ci
132da853ecaSopenharmony_civoid DemuxFunc(int i, int loop)
133da853ecaSopenharmony_ci{
134da853ecaSopenharmony_ci    bool audioIsEnd = false;
135da853ecaSopenharmony_ci    bool videoIsEnd = false;
136da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
137da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer_list[i], 0));
138da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer_list[i], 1));
139da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
140da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_track; index++) {
141da853ecaSopenharmony_ci            if ((audioIsEnd && (index == MEDIA_TYPE_AUD)) || (videoIsEnd && (index == MEDIA_TYPE_VID))) {
142da853ecaSopenharmony_ci                continue;
143da853ecaSopenharmony_ci            }
144da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer_list[i], index, memory_list[i], &attr));
145da853ecaSopenharmony_ci
146da853ecaSopenharmony_ci            if ((index == MEDIA_TYPE_AUD) && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) {
147da853ecaSopenharmony_ci                audioIsEnd = true;
148da853ecaSopenharmony_ci            }
149da853ecaSopenharmony_ci            if ((index == MEDIA_TYPE_VID) && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) {
150da853ecaSopenharmony_ci                videoIsEnd = true;
151da853ecaSopenharmony_ci            }
152da853ecaSopenharmony_ci        }
153da853ecaSopenharmony_ci    }
154da853ecaSopenharmony_ci}
155da853ecaSopenharmony_ci
156da853ecaSopenharmony_cistatic void SetAudioValue(OH_AVCodecBufferAttr attr, bool &audioIsEnd, int &audioFrame)
157da853ecaSopenharmony_ci{
158da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
159da853ecaSopenharmony_ci        audioIsEnd = true;
160da853ecaSopenharmony_ci        cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
161da853ecaSopenharmony_ci    } else {
162da853ecaSopenharmony_ci        audioFrame++;
163da853ecaSopenharmony_ci    }
164da853ecaSopenharmony_ci}
165da853ecaSopenharmony_ci
166da853ecaSopenharmony_cistatic void SetVideoValue(OH_AVCodecBufferAttr attr, bool &videoIsEnd, int &videoFrame)
167da853ecaSopenharmony_ci{
168da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
169da853ecaSopenharmony_ci        videoIsEnd = true;
170da853ecaSopenharmony_ci        cout << videoFrame << "   video is end !!!!!!!!!!!!!!!" << endl;
171da853ecaSopenharmony_ci    } else {
172da853ecaSopenharmony_ci        videoFrame++;
173da853ecaSopenharmony_ci        cout << "video track !!!!!" << endl;
174da853ecaSopenharmony_ci    }
175da853ecaSopenharmony_ci}
176da853ecaSopenharmony_ci
177da853ecaSopenharmony_ci/**
178da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_1000
179da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory
180da853ecaSopenharmony_ci * @tc.desc      : function test
181da853ecaSopenharmony_ci */
182da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_1000, TestSize.Level3)
183da853ecaSopenharmony_ci{
184da853ecaSopenharmony_ci    int len = 256;
185da853ecaSopenharmony_ci    int num = 0;
186da853ecaSopenharmony_ci    vector<std::thread> vecThread;
187da853ecaSopenharmony_ci    for (int i = 0; i < g_maxThread; i++) {
188da853ecaSopenharmony_ci        memory_list[i] = OH_AVMemory_Create(g_width * g_height);
189da853ecaSopenharmony_ci        char file[256] = {};
190da853ecaSopenharmony_ci        sprintf_s(file, len, "/data/test/media/16/%d_video_audio.mp4", i);
191da853ecaSopenharmony_ci        g_fdList[i] = open(file, O_RDONLY);
192da853ecaSopenharmony_ci        int64_t size = GetFileSize(file);
193da853ecaSopenharmony_ci        cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
194da853ecaSopenharmony_ci
195da853ecaSopenharmony_ci        source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
196da853ecaSopenharmony_ci        ASSERT_NE(source_list[i], nullptr);
197da853ecaSopenharmony_ci
198da853ecaSopenharmony_ci        demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
199da853ecaSopenharmony_ci        ASSERT_NE(demuxer_list[i], nullptr);
200da853ecaSopenharmony_ci        vecThread.emplace_back(DemuxFunc, i, num);
201da853ecaSopenharmony_ci    }
202da853ecaSopenharmony_ci    for (auto &val : vecThread) {
203da853ecaSopenharmony_ci        val.join();
204da853ecaSopenharmony_ci    }
205da853ecaSopenharmony_ci}
206da853ecaSopenharmony_ci
207da853ecaSopenharmony_ci/**
208da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_0200
209da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory
210da853ecaSopenharmony_ci * @tc.desc      : function test
211da853ecaSopenharmony_ci */
212da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_0200, TestSize.Level3)
213da853ecaSopenharmony_ci{
214da853ecaSopenharmony_ci    int num = 0;
215da853ecaSopenharmony_ci    int len = 256;
216da853ecaSopenharmony_ci    while (num < 10) {
217da853ecaSopenharmony_ci        num++;
218da853ecaSopenharmony_ci        vector<std::thread> vecThread;
219da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
220da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
221da853ecaSopenharmony_ci            char file[256] = {};
222da853ecaSopenharmony_ci            sprintf_s(file, len, "/data/test/media/16/%d_video_audio.mp4", i);
223da853ecaSopenharmony_ci            g_fdList[i] = open(file, O_RDONLY);
224da853ecaSopenharmony_ci            int64_t size = GetFileSize(file);
225da853ecaSopenharmony_ci            cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
226da853ecaSopenharmony_ci
227da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
228da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
229da853ecaSopenharmony_ci
230da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
231da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
232da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
233da853ecaSopenharmony_ci        }
234da853ecaSopenharmony_ci        for (auto &val : vecThread) {
235da853ecaSopenharmony_ci            val.join();
236da853ecaSopenharmony_ci        }
237da853ecaSopenharmony_ci
238da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
239da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
240da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
241da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
242da853ecaSopenharmony_ci            }
243da853ecaSopenharmony_ci
244da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
245da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
246da853ecaSopenharmony_ci                source_list[i] = nullptr;
247da853ecaSopenharmony_ci            }
248da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
249da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
250da853ecaSopenharmony_ci                memory_list[i] = nullptr;
251da853ecaSopenharmony_ci            }
252da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
253da853ecaSopenharmony_ci
254da853ecaSopenharmony_ci            close(g_fdList[i]);
255da853ecaSopenharmony_ci        }
256da853ecaSopenharmony_ci        cout << "num: " << num << endl;
257da853ecaSopenharmony_ci    }
258da853ecaSopenharmony_ci}
259da853ecaSopenharmony_ci
260da853ecaSopenharmony_ci/**
261da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_0300
262da853ecaSopenharmony_ci * @tc.name      : create 17 instances,17 failed
263da853ecaSopenharmony_ci * @tc.desc      : function test
264da853ecaSopenharmony_ci */
265da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_0300, TestSize.Level3)
266da853ecaSopenharmony_ci{
267da853ecaSopenharmony_ci    int num = 0;
268da853ecaSopenharmony_ci    int len = 256;
269da853ecaSopenharmony_ci    int64_t size = 0;
270da853ecaSopenharmony_ci    vector<std::thread> vecThread;
271da853ecaSopenharmony_ci    for (int i = 0; i < g_maxThread; i++) {
272da853ecaSopenharmony_ci        memory_list[i] = OH_AVMemory_Create(g_width * g_height);
273da853ecaSopenharmony_ci        char file[256] = {};
274da853ecaSopenharmony_ci        sprintf_s(file, len, "/data/test/media/16/%d_video_audio.mp4", i);
275da853ecaSopenharmony_ci        g_fdList[i] = open(file, O_RDONLY);
276da853ecaSopenharmony_ci        size = GetFileSize(file);
277da853ecaSopenharmony_ci        cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
278da853ecaSopenharmony_ci
279da853ecaSopenharmony_ci        source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
280da853ecaSopenharmony_ci        ASSERT_NE(source_list[i], nullptr);
281da853ecaSopenharmony_ci
282da853ecaSopenharmony_ci        demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
283da853ecaSopenharmony_ci        ASSERT_NE(demuxer_list[i], nullptr);
284da853ecaSopenharmony_ci        vecThread.emplace_back(DemuxFunc, i, num);
285da853ecaSopenharmony_ci    }
286da853ecaSopenharmony_ci    for (auto &val : vecThread) {
287da853ecaSopenharmony_ci        val.join();
288da853ecaSopenharmony_ci    }
289da853ecaSopenharmony_ci
290da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(g_fdList[15], 0, size);
291da853ecaSopenharmony_ci    ASSERT_EQ(source, nullptr);
292da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
293da853ecaSopenharmony_ci    ASSERT_EQ(demuxer, nullptr);
294da853ecaSopenharmony_ci}
295da853ecaSopenharmony_ci
296da853ecaSopenharmony_ci/**
297da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_0400
298da853ecaSopenharmony_ci * @tc.name      : one instance repeat create destory
299da853ecaSopenharmony_ci * @tc.desc      : function test
300da853ecaSopenharmony_ci */
301da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_0400, TestSize.Level0)
302da853ecaSopenharmony_ci{
303da853ecaSopenharmony_ci    int num = 0;
304da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
305da853ecaSopenharmony_ci
306da853ecaSopenharmony_ci    const char *file = "/data/test/media/01_video_audio.mp4";
307da853ecaSopenharmony_ci    bool audioIsEnd = false;
308da853ecaSopenharmony_ci    bool videoIsEnd = false;
309da853ecaSopenharmony_ci
310da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
311da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
312da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
313da853ecaSopenharmony_ci    num++;
314da853ecaSopenharmony_ci    cout << num << endl;
315da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
316da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
317da853ecaSopenharmony_ci
318da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
319da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
320da853ecaSopenharmony_ci
321da853ecaSopenharmony_ci    for (int32_t index = 0; index < 2; index++) {
322da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
323da853ecaSopenharmony_ci    }
324da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
325da853ecaSopenharmony_ci        for (int32_t index = 0; index < 2; index++) {
326da853ecaSopenharmony_ci
327da853ecaSopenharmony_ci            if ((audioIsEnd && (index == MEDIA_TYPE_AUD)) || (videoIsEnd && (index == MEDIA_TYPE_VID))) {
328da853ecaSopenharmony_ci                continue;
329da853ecaSopenharmony_ci            }
330da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
331da853ecaSopenharmony_ci
332da853ecaSopenharmony_ci            if ((index == MEDIA_TYPE_AUD) && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) {
333da853ecaSopenharmony_ci                audioIsEnd = true;
334da853ecaSopenharmony_ci                cout << "    audio is end !!!!!!!!!!!!!!!" << endl;
335da853ecaSopenharmony_ci            }
336da853ecaSopenharmony_ci            if ((index == MEDIA_TYPE_VID) && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) {
337da853ecaSopenharmony_ci                videoIsEnd = true;
338da853ecaSopenharmony_ci                cout << "   video is end !!!!!!!!!!!!!!!" << endl;
339da853ecaSopenharmony_ci            }
340da853ecaSopenharmony_ci        }
341da853ecaSopenharmony_ci    }
342da853ecaSopenharmony_ci    if (source != nullptr) {
343da853ecaSopenharmony_ci        OH_AVSource_Destroy(source);
344da853ecaSopenharmony_ci        source = nullptr;
345da853ecaSopenharmony_ci    }
346da853ecaSopenharmony_ci    if (demuxer != nullptr) {
347da853ecaSopenharmony_ci        OH_AVDemuxer_Destroy(demuxer);
348da853ecaSopenharmony_ci        demuxer = nullptr;
349da853ecaSopenharmony_ci    }
350da853ecaSopenharmony_ci    close(fd);
351da853ecaSopenharmony_ci}
352da853ecaSopenharmony_ci
353da853ecaSopenharmony_ci/**
354da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_0500
355da853ecaSopenharmony_ci * @tc.name      : one instance demux long file
356da853ecaSopenharmony_ci * @tc.desc      : function test
357da853ecaSopenharmony_ci */
358da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_0500, TestSize.Level3)
359da853ecaSopenharmony_ci{
360da853ecaSopenharmony_ci    int num = 0;
361da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
362da853ecaSopenharmony_ci
363da853ecaSopenharmony_ci    const char *file = "/data/test/media/long.mp4";
364da853ecaSopenharmony_ci
365da853ecaSopenharmony_ci    bool audioIsEnd = false;
366da853ecaSopenharmony_ci    bool videoIsEnd = false;
367da853ecaSopenharmony_ci    int audioFrame = 0;
368da853ecaSopenharmony_ci    int videoFrame = 0;
369da853ecaSopenharmony_ci
370da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
371da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
372da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
373da853ecaSopenharmony_ci    num++;
374da853ecaSopenharmony_ci    cout << num << endl;
375da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
376da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
377da853ecaSopenharmony_ci
378da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
379da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
380da853ecaSopenharmony_ci
381da853ecaSopenharmony_ci    for (int32_t index = 0; index < 2; index++) {
382da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
383da853ecaSopenharmony_ci    }
384da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
385da853ecaSopenharmony_ci        for (int32_t index = 0; index < 2; index++) {
386da853ecaSopenharmony_ci            if ((audioIsEnd && (index == MEDIA_TYPE_AUD)) || (videoIsEnd && (index == MEDIA_TYPE_VID))) {
387da853ecaSopenharmony_ci                continue;
388da853ecaSopenharmony_ci            }
389da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
390da853ecaSopenharmony_ci
391da853ecaSopenharmony_ci            if (index == MEDIA_TYPE_AUD) {
392da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
393da853ecaSopenharmony_ci            } else if (index == MEDIA_TYPE_VID) {
394da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
395da853ecaSopenharmony_ci            }
396da853ecaSopenharmony_ci        }
397da853ecaSopenharmony_ci    }
398da853ecaSopenharmony_ci    close(fd);
399da853ecaSopenharmony_ci}
400da853ecaSopenharmony_ci
401da853ecaSopenharmony_ci/**
402da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_0100
403da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithURI Repeat Call
404da853ecaSopenharmony_ci * @tc.desc      : api test
405da853ecaSopenharmony_ci */
406da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_0100, TestSize.Level2)
407da853ecaSopenharmony_ci{
408da853ecaSopenharmony_ci    OH_AVSource *source1 = OH_AVSource_CreateWithURI(const_cast<char *>(URI1));
409da853ecaSopenharmony_ci    cout << URI1 << "-----------------------" << endl;
410da853ecaSopenharmony_ci    ASSERT_NE(source1, nullptr);
411da853ecaSopenharmony_ci    OH_AVSource *source2 = OH_AVSource_CreateWithURI(const_cast<char *>(URI2));
412da853ecaSopenharmony_ci    cout << URI2 << "-----------------------" << endl;
413da853ecaSopenharmony_ci    ASSERT_NE(source2, nullptr);
414da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source1));
415da853ecaSopenharmony_ci    source1 = nullptr;
416da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source2));
417da853ecaSopenharmony_ci    source2 = nullptr;
418da853ecaSopenharmony_ci}
419da853ecaSopenharmony_ci
420da853ecaSopenharmony_ci/**
421da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_4400
422da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithURI with unSupported rtsp uri
423da853ecaSopenharmony_ci * @tc.desc      : api test
424da853ecaSopenharmony_ci */
425da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_4400, TestSize.Level2)
426da853ecaSopenharmony_ci{
427da853ecaSopenharmony_ci    const char *uri = "rtp://192.168.3.11:12345";
428da853ecaSopenharmony_ci    cout << uri << "------" << endl;
429da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
430da853ecaSopenharmony_ci    ASSERT_EQ(source, nullptr);
431da853ecaSopenharmony_ci}
432da853ecaSopenharmony_ci
433da853ecaSopenharmony_ci/**
434da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_4500
435da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithURI with unSupported rtp uri
436da853ecaSopenharmony_ci * @tc.desc      : api test
437da853ecaSopenharmony_ci */
438da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_4500, TestSize.Level2)
439da853ecaSopenharmony_ci{
440da853ecaSopenharmony_ci    const char *uri = "rtp://192.168.3.11:12345";
441da853ecaSopenharmony_ci    cout << uri << "------" << endl;
442da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
443da853ecaSopenharmony_ci    ASSERT_EQ(source, nullptr);
444da853ecaSopenharmony_ci}
445da853ecaSopenharmony_ci
446da853ecaSopenharmony_ci/**
447da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_4600
448da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithURI with invalid uri
449da853ecaSopenharmony_ci * @tc.desc      : api test
450da853ecaSopenharmony_ci */
451da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_4600, TestSize.Level2)
452da853ecaSopenharmony_ci{
453da853ecaSopenharmony_ci    const char *uri = "https://media.w3.org/2010/05/sinte/trailer.mp4";
454da853ecaSopenharmony_ci    cout << uri << "------" << endl;
455da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
456da853ecaSopenharmony_ci    ASSERT_EQ(source, nullptr);
457da853ecaSopenharmony_ci}
458da853ecaSopenharmony_ci
459da853ecaSopenharmony_ci/**
460da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_4700
461da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithURI with https
462da853ecaSopenharmony_ci * @tc.desc      : api test
463da853ecaSopenharmony_ci */
464da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_4700, TestSize.Level2)
465da853ecaSopenharmony_ci{
466da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
467da853ecaSopenharmony_ci    bool audioIsEnd = false;
468da853ecaSopenharmony_ci    bool videoIsEnd = false;
469da853ecaSopenharmony_ci    int audioFrame = 0;
470da853ecaSopenharmony_ci    int videoFrame = 0;
471da853ecaSopenharmony_ci    int tarckType = 0;
472da853ecaSopenharmony_ci    const char *uri = "https://media.w3.org/2010/05/sintel/trailer.mp4";
473da853ecaSopenharmony_ci    cout << uri << "------" << endl;
474da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
475da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
476da853ecaSopenharmony_ci
477da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
478da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
479da853ecaSopenharmony_ci
480da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
481da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
482da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
483da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
484da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
485da853ecaSopenharmony_ci    }
486da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
487da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
488da853ecaSopenharmony_ci
489da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
490da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
491da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
492da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
493da853ecaSopenharmony_ci            trackFormat = nullptr;
494da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
495da853ecaSopenharmony_ci                continue;
496da853ecaSopenharmony_ci            }
497da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
498da853ecaSopenharmony_ci
499da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
500da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
501da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
502da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
503da853ecaSopenharmony_ci            }
504da853ecaSopenharmony_ci        }
505da853ecaSopenharmony_ci    }
506da853ecaSopenharmony_ci}
507da853ecaSopenharmony_ci
508da853ecaSopenharmony_ci/**
509da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_4800
510da853ecaSopenharmony_ci * @tc.name      : OH_AVSource_CreateWithURI with not supported track
511da853ecaSopenharmony_ci * @tc.desc      : api test
512da853ecaSopenharmony_ci */
513da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_4800, TestSize.Level2)
514da853ecaSopenharmony_ci{
515da853ecaSopenharmony_ci    const char *uri = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
516da853ecaSopenharmony_ci    cout << uri << "------" << endl;
517da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
518da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
519da853ecaSopenharmony_ci
520da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
521da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
522da853ecaSopenharmony_ci
523da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
524da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
525da853ecaSopenharmony_ci    ASSERT_EQ(4, g_trackCount);
526da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
527da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 1));
528da853ecaSopenharmony_ci    ASSERT_NE(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 2));
529da853ecaSopenharmony_ci    ASSERT_NE(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 3));
530da853ecaSopenharmony_ci}
531da853ecaSopenharmony_ci
532da853ecaSopenharmony_ci/**
533da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_4900
534da853ecaSopenharmony_ci * @tc.name      : create source with uri
535da853ecaSopenharmony_ci * @tc.desc      : function test
536da853ecaSopenharmony_ci */
537da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_4900, TestSize.Level0)
538da853ecaSopenharmony_ci{
539da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
540da853ecaSopenharmony_ci    bool audioIsEnd = false;
541da853ecaSopenharmony_ci    int audioFrame = 0;
542da853ecaSopenharmony_ci
543da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/MP3_48000_1.mp3";
544da853ecaSopenharmony_ci    cout << uri << "------" << endl;
545da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
546da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
547da853ecaSopenharmony_ci
548da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
549da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
550da853ecaSopenharmony_ci
551da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
552da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
553da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
554da853ecaSopenharmony_ci
555da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
556da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
557da853ecaSopenharmony_ci    }
558da853ecaSopenharmony_ci    int keyCount = 0;
559da853ecaSopenharmony_ci    while (!audioIsEnd) {
560da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
561da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
562da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
563da853ecaSopenharmony_ci                audioIsEnd = true;
564da853ecaSopenharmony_ci                cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
565da853ecaSopenharmony_ci                continue;
566da853ecaSopenharmony_ci            }
567da853ecaSopenharmony_ci
568da853ecaSopenharmony_ci            audioFrame++;
569da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
570da853ecaSopenharmony_ci                keyCount++;
571da853ecaSopenharmony_ci            }
572da853ecaSopenharmony_ci        }
573da853ecaSopenharmony_ci    }
574da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9150);
575da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9150);
576da853ecaSopenharmony_ci}
577da853ecaSopenharmony_ci
578da853ecaSopenharmony_ci/**
579da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_0500
580da853ecaSopenharmony_ci * @tc.name      : create source with uri,aac
581da853ecaSopenharmony_ci * @tc.desc      : function test
582da853ecaSopenharmony_ci */
583da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5000, TestSize.Level0)
584da853ecaSopenharmony_ci{
585da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
586da853ecaSopenharmony_ci    bool isEnd = false;
587da853ecaSopenharmony_ci
588da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/AAC_48000_1.aac";
589da853ecaSopenharmony_ci    cout << uri << "------" << endl;
590da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
591da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
592da853ecaSopenharmony_ci
593da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
594da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
595da853ecaSopenharmony_ci
596da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
597da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
598da853ecaSopenharmony_ci
599da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
600da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
601da853ecaSopenharmony_ci    }
602da853ecaSopenharmony_ci
603da853ecaSopenharmony_ci    int audioFrame = 0;
604da853ecaSopenharmony_ci    int keyCount = 0;
605da853ecaSopenharmony_ci    while (!isEnd) {
606da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
607da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
608da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
609da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
610da853ecaSopenharmony_ci                isEnd = true;
611da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
612da853ecaSopenharmony_ci                continue;
613da853ecaSopenharmony_ci            }
614da853ecaSopenharmony_ci
615da853ecaSopenharmony_ci            audioFrame++;
616da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
617da853ecaSopenharmony_ci                keyCount++;
618da853ecaSopenharmony_ci            }
619da853ecaSopenharmony_ci        }
620da853ecaSopenharmony_ci    }
621da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9457);
622da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9457);
623da853ecaSopenharmony_ci}
624da853ecaSopenharmony_ci
625da853ecaSopenharmony_ci/**
626da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5100
627da853ecaSopenharmony_ci * @tc.name      : create source with uri,flac
628da853ecaSopenharmony_ci * @tc.desc      : function test
629da853ecaSopenharmony_ci */
630da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5100, TestSize.Level0)
631da853ecaSopenharmony_ci{
632da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
633da853ecaSopenharmony_ci    bool isEnd = false;
634da853ecaSopenharmony_ci
635da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/FLAC_48000_1.flac";
636da853ecaSopenharmony_ci    cout << uri << "------" << endl;
637da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
638da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
639da853ecaSopenharmony_ci
640da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
641da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
642da853ecaSopenharmony_ci
643da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
644da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
645da853ecaSopenharmony_ci
646da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
647da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
648da853ecaSopenharmony_ci    }
649da853ecaSopenharmony_ci
650da853ecaSopenharmony_ci    int audioFrame = 0;
651da853ecaSopenharmony_ci    int keyCount = 0;
652da853ecaSopenharmony_ci    while (!isEnd) {
653da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
654da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
655da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
656da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
657da853ecaSopenharmony_ci                isEnd = true;
658da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
659da853ecaSopenharmony_ci                continue;
660da853ecaSopenharmony_ci            }
661da853ecaSopenharmony_ci
662da853ecaSopenharmony_ci            audioFrame++;
663da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
664da853ecaSopenharmony_ci                keyCount++;
665da853ecaSopenharmony_ci            }
666da853ecaSopenharmony_ci        }
667da853ecaSopenharmony_ci    }
668da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 2288);
669da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 2288);
670da853ecaSopenharmony_ci}
671da853ecaSopenharmony_ci
672da853ecaSopenharmony_ci/**
673da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5200
674da853ecaSopenharmony_ci * @tc.name      : create source with uri,m4a
675da853ecaSopenharmony_ci * @tc.desc      : function test
676da853ecaSopenharmony_ci */
677da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5200, TestSize.Level0)
678da853ecaSopenharmony_ci{
679da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
680da853ecaSopenharmony_ci    bool isEnd = false;
681da853ecaSopenharmony_ci
682da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/M4A_48000_1.m4a";
683da853ecaSopenharmony_ci    cout << uri << "------" << endl;
684da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
685da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
686da853ecaSopenharmony_ci
687da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
688da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
689da853ecaSopenharmony_ci
690da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
691da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
692da853ecaSopenharmony_ci
693da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
694da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
695da853ecaSopenharmony_ci    }
696da853ecaSopenharmony_ci
697da853ecaSopenharmony_ci    int audioFrame = 0;
698da853ecaSopenharmony_ci    int keyCount = 0;
699da853ecaSopenharmony_ci    while (!isEnd) {
700da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
701da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
702da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
703da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
704da853ecaSopenharmony_ci                isEnd = true;
705da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
706da853ecaSopenharmony_ci                continue;
707da853ecaSopenharmony_ci            }
708da853ecaSopenharmony_ci
709da853ecaSopenharmony_ci            audioFrame++;
710da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
711da853ecaSopenharmony_ci                keyCount++;
712da853ecaSopenharmony_ci            }
713da853ecaSopenharmony_ci        }
714da853ecaSopenharmony_ci    }
715da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 10293);
716da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 10293);
717da853ecaSopenharmony_ci}
718da853ecaSopenharmony_ci
719da853ecaSopenharmony_ci/**
720da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5300
721da853ecaSopenharmony_ci * @tc.name      : create source with uri,mp3
722da853ecaSopenharmony_ci * @tc.desc      : function test
723da853ecaSopenharmony_ci */
724da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5300, TestSize.Level0)
725da853ecaSopenharmony_ci{
726da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
727da853ecaSopenharmony_ci    bool isEnd = false;
728da853ecaSopenharmony_ci
729da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/MP3_48000_1.mp3";
730da853ecaSopenharmony_ci    cout << uri << "------" << endl;
731da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
732da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
733da853ecaSopenharmony_ci
734da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
735da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
736da853ecaSopenharmony_ci
737da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
738da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
739da853ecaSopenharmony_ci
740da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
741da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
742da853ecaSopenharmony_ci    }
743da853ecaSopenharmony_ci
744da853ecaSopenharmony_ci    int audioFrame = 0;
745da853ecaSopenharmony_ci    int keyCount = 0;
746da853ecaSopenharmony_ci    while (!isEnd) {
747da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
748da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
749da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
750da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
751da853ecaSopenharmony_ci                isEnd = true;
752da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
753da853ecaSopenharmony_ci                continue;
754da853ecaSopenharmony_ci            }
755da853ecaSopenharmony_ci
756da853ecaSopenharmony_ci            audioFrame++;
757da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
758da853ecaSopenharmony_ci                keyCount++;
759da853ecaSopenharmony_ci            }
760da853ecaSopenharmony_ci        }
761da853ecaSopenharmony_ci    }
762da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 9150);
763da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 9150);
764da853ecaSopenharmony_ci}
765da853ecaSopenharmony_ci
766da853ecaSopenharmony_ci/**
767da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5400
768da853ecaSopenharmony_ci * @tc.name      : create source with uri,ogg
769da853ecaSopenharmony_ci * @tc.desc      : function test
770da853ecaSopenharmony_ci */
771da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5400, TestSize.Level0)
772da853ecaSopenharmony_ci{
773da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
774da853ecaSopenharmony_ci    bool isEnd = false;
775da853ecaSopenharmony_ci
776da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/OGG_48000_1.ogg";
777da853ecaSopenharmony_ci    cout << uri << "------" << endl;
778da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
779da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
780da853ecaSopenharmony_ci
781da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
782da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
783da853ecaSopenharmony_ci
784da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
785da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
786da853ecaSopenharmony_ci
787da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
788da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
789da853ecaSopenharmony_ci    }
790da853ecaSopenharmony_ci
791da853ecaSopenharmony_ci    int audioFrame = 0;
792da853ecaSopenharmony_ci    int keyCount = 0;
793da853ecaSopenharmony_ci    while (!isEnd) {
794da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
795da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
796da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
797da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
798da853ecaSopenharmony_ci                isEnd = true;
799da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
800da853ecaSopenharmony_ci                continue;
801da853ecaSopenharmony_ci            }
802da853ecaSopenharmony_ci
803da853ecaSopenharmony_ci            audioFrame++;
804da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
805da853ecaSopenharmony_ci                keyCount++;
806da853ecaSopenharmony_ci            }
807da853ecaSopenharmony_ci        }
808da853ecaSopenharmony_ci    }
809da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 11439);
810da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 11439);
811da853ecaSopenharmony_ci}
812da853ecaSopenharmony_ci
813da853ecaSopenharmony_ci/**
814da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5500
815da853ecaSopenharmony_ci * @tc.name      : create source with uri,wav
816da853ecaSopenharmony_ci * @tc.desc      : function test
817da853ecaSopenharmony_ci */
818da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5500, TestSize.Level0)
819da853ecaSopenharmony_ci{
820da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
821da853ecaSopenharmony_ci    bool isEnd = false;
822da853ecaSopenharmony_ci
823da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/audio/wav_48000_1.wav";
824da853ecaSopenharmony_ci    cout << uri << "------" << endl;
825da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
826da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
827da853ecaSopenharmony_ci
828da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
829da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
830da853ecaSopenharmony_ci
831da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
832da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
833da853ecaSopenharmony_ci
834da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
835da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
836da853ecaSopenharmony_ci    }
837da853ecaSopenharmony_ci
838da853ecaSopenharmony_ci    int audioFrame = 0;
839da853ecaSopenharmony_ci    int keyCount = 0;
840da853ecaSopenharmony_ci    while (!isEnd) {
841da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
842da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
843da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
844da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
845da853ecaSopenharmony_ci                isEnd = true;
846da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
847da853ecaSopenharmony_ci                continue;
848da853ecaSopenharmony_ci            }
849da853ecaSopenharmony_ci
850da853ecaSopenharmony_ci            audioFrame++;
851da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
852da853ecaSopenharmony_ci                keyCount++;
853da853ecaSopenharmony_ci            }
854da853ecaSopenharmony_ci        }
855da853ecaSopenharmony_ci    }
856da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 5146);
857da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 5146);
858da853ecaSopenharmony_ci}
859da853ecaSopenharmony_ci
860da853ecaSopenharmony_ci/**
861da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5600
862da853ecaSopenharmony_ci * @tc.name      : create source with uri,mp4
863da853ecaSopenharmony_ci * @tc.desc      : function test
864da853ecaSopenharmony_ci */
865da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5600, TestSize.Level0)
866da853ecaSopenharmony_ci{
867da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
868da853ecaSopenharmony_ci    bool audioIsEnd = false;
869da853ecaSopenharmony_ci    bool videoIsEnd = false;
870da853ecaSopenharmony_ci    int audioFrame = 0;
871da853ecaSopenharmony_ci    int videoFrame = 0;
872da853ecaSopenharmony_ci    int tarckType = 0;
873da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/01_video_audio.mp4";
874da853ecaSopenharmony_ci    cout << uri << "------" << endl;
875da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
876da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
877da853ecaSopenharmony_ci
878da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
879da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
880da853ecaSopenharmony_ci
881da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
882da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
883da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
884da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
885da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
886da853ecaSopenharmony_ci    }
887da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
888da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
889da853ecaSopenharmony_ci
890da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
891da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
892da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
893da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
894da853ecaSopenharmony_ci            trackFormat = nullptr;
895da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
896da853ecaSopenharmony_ci                continue;
897da853ecaSopenharmony_ci            }
898da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
899da853ecaSopenharmony_ci
900da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
901da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
902da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
903da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
904da853ecaSopenharmony_ci            }
905da853ecaSopenharmony_ci        }
906da853ecaSopenharmony_ci    }
907da853ecaSopenharmony_ci}
908da853ecaSopenharmony_ci
909da853ecaSopenharmony_civoid CreateDemuxer(char *uri)
910da853ecaSopenharmony_ci{
911da853ecaSopenharmony_ci    int two = 2;
912da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
913da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
914da853ecaSopenharmony_ci
915da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
916da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
917da853ecaSopenharmony_ci
918da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
919da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
920da853ecaSopenharmony_ci    ASSERT_EQ(two, g_trackCount);
921da853ecaSopenharmony_ci
922da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
923da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
924da853ecaSopenharmony_ci    }
925da853ecaSopenharmony_ci}
926da853ecaSopenharmony_ci
927da853ecaSopenharmony_ci/**
928da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5700
929da853ecaSopenharmony_ci * @tc.name      : create source with uri,hvcc mp4
930da853ecaSopenharmony_ci * @tc.desc      : function test
931da853ecaSopenharmony_ci */
932da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5700, TestSize.Level0)
933da853ecaSopenharmony_ci{
934da853ecaSopenharmony_ci    int tarckType = 0;
935da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
936da853ecaSopenharmony_ci    bool audioIsEnd = false;
937da853ecaSopenharmony_ci    bool videoIsEnd = false;
938da853ecaSopenharmony_ci    int audioFrame = 0;
939da853ecaSopenharmony_ci    int videoFrame = 0;
940da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/hvcc_1920x1080_60.mp4";
941da853ecaSopenharmony_ci    cout << uri << "------" << endl;
942da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
943da853ecaSopenharmony_ci    int aKeyCount = 0;
944da853ecaSopenharmony_ci    int vKeyCount = 0;
945da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
946da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
947da853ecaSopenharmony_ci
948da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
949da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
950da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
951da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
952da853ecaSopenharmony_ci            trackFormat = nullptr;
953da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
954da853ecaSopenharmony_ci                continue;
955da853ecaSopenharmony_ci            }
956da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
957da853ecaSopenharmony_ci
958da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
959da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
960da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
961da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
962da853ecaSopenharmony_ci            }
963da853ecaSopenharmony_ci
964da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD && attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
965da853ecaSopenharmony_ci                aKeyCount++;
966da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID && attr.flags &
967da853ecaSopenharmony_ci             OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
968da853ecaSopenharmony_ci                vKeyCount++;
969da853ecaSopenharmony_ci            }
970da853ecaSopenharmony_ci        }
971da853ecaSopenharmony_ci    }
972da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 433);
973da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
974da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 433);
975da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 3);
976da853ecaSopenharmony_ci}
977da853ecaSopenharmony_ci
978da853ecaSopenharmony_ci/**
979da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5800
980da853ecaSopenharmony_ci * @tc.name      : create source with uri,wav
981da853ecaSopenharmony_ci * @tc.desc      : function test
982da853ecaSopenharmony_ci */
983da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5800, TestSize.Level0)
984da853ecaSopenharmony_ci{
985da853ecaSopenharmony_ci    int tarckType = 0;
986da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
987da853ecaSopenharmony_ci    bool audioIsEnd = false;
988da853ecaSopenharmony_ci    bool videoIsEnd = false;
989da853ecaSopenharmony_ci    int audioFrame = 0;
990da853ecaSopenharmony_ci    int videoFrame = 0;
991da853ecaSopenharmony_ci
992da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/avcc_10sec.mp4";
993da853ecaSopenharmony_ci    cout << uri << "------" << endl;
994da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
995da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
996da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
997da853ecaSopenharmony_ci
998da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
999da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1000da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1001da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1002da853ecaSopenharmony_ci            trackFormat = nullptr;
1003da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1004da853ecaSopenharmony_ci                continue;
1005da853ecaSopenharmony_ci            }
1006da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1007da853ecaSopenharmony_ci
1008da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1009da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1010da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1011da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1012da853ecaSopenharmony_ci            }
1013da853ecaSopenharmony_ci        }
1014da853ecaSopenharmony_ci    }
1015da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 431);
1016da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 600);
1017da853ecaSopenharmony_ci}
1018da853ecaSopenharmony_ci
1019da853ecaSopenharmony_ci/**
1020da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_5900
1021da853ecaSopenharmony_ci * @tc.name      : create source with uri,wav
1022da853ecaSopenharmony_ci * @tc.desc      : function test
1023da853ecaSopenharmony_ci */
1024da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_5900, TestSize.Level0)
1025da853ecaSopenharmony_ci{
1026da853ecaSopenharmony_ci    int tarckType = 0;
1027da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1028da853ecaSopenharmony_ci    bool audioIsEnd = false;
1029da853ecaSopenharmony_ci    bool videoIsEnd = false;
1030da853ecaSopenharmony_ci    int audioFrame = 0;
1031da853ecaSopenharmony_ci    int videoFrame = 0;
1032da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/ts_video.ts";
1033da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1034da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1035da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1036da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1037da853ecaSopenharmony_ci
1038da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1039da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1040da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1041da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1042da853ecaSopenharmony_ci            trackFormat = nullptr;
1043da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1044da853ecaSopenharmony_ci                continue;
1045da853ecaSopenharmony_ci            }
1046da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1047da853ecaSopenharmony_ci
1048da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1049da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1050da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1051da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1052da853ecaSopenharmony_ci            }
1053da853ecaSopenharmony_ci        }
1054da853ecaSopenharmony_ci    }
1055da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 384);
1056da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
1057da853ecaSopenharmony_ci}
1058da853ecaSopenharmony_ci
1059da853ecaSopenharmony_ci/**
1060da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6000
1061da853ecaSopenharmony_ci * @tc.name      : create source with uri,wav
1062da853ecaSopenharmony_ci * @tc.desc      : function test
1063da853ecaSopenharmony_ci */
1064da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6000, TestSize.Level0)
1065da853ecaSopenharmony_ci{
1066da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/zero_track.mp4";
1067da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1068da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1069da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1070da853ecaSopenharmony_ci
1071da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1072da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1073da853ecaSopenharmony_ci
1074da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1075da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1076da853ecaSopenharmony_ci    ASSERT_EQ(g_trackCount, 0);
1077da853ecaSopenharmony_ci
1078da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_INVALID_VAL, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
1079da853ecaSopenharmony_ci}
1080da853ecaSopenharmony_ci
1081da853ecaSopenharmony_ci/**
1082da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6100
1083da853ecaSopenharmony_ci * @tc.name      : create source with uri
1084da853ecaSopenharmony_ci * @tc.desc      : reliable test
1085da853ecaSopenharmony_ci */
1086da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6100, TestSize.Level0)
1087da853ecaSopenharmony_ci{
1088da853ecaSopenharmony_ci    int num = 0;
1089da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1090da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/avcc_10sec.mp4";
1091da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1092da853ecaSopenharmony_ci    cout<<"num: "<<num<<endl;
1093da853ecaSopenharmony_ci    int tarckType = 0;
1094da853ecaSopenharmony_ci    bool audioIsEnd = false;
1095da853ecaSopenharmony_ci    bool videoIsEnd = false;
1096da853ecaSopenharmony_ci    int audioFrame = 0;
1097da853ecaSopenharmony_ci    int videoFrame = 0;
1098da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1099da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1100da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1101da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1102da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1103da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1104da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1105da853ecaSopenharmony_ci            trackFormat = nullptr;
1106da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1107da853ecaSopenharmony_ci                continue;
1108da853ecaSopenharmony_ci            }
1109da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1110da853ecaSopenharmony_ci
1111da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1112da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1113da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1114da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1115da853ecaSopenharmony_ci            }
1116da853ecaSopenharmony_ci        }
1117da853ecaSopenharmony_ci    }
1118da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 431);
1119da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 600);
1120da853ecaSopenharmony_ci    num++;
1121da853ecaSopenharmony_ci}
1122da853ecaSopenharmony_ci
1123da853ecaSopenharmony_ci/**
1124da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6200
1125da853ecaSopenharmony_ci * @tc.name      : create source with uri
1126da853ecaSopenharmony_ci * @tc.desc      : reliable test
1127da853ecaSopenharmony_ci */
1128da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6200, TestSize.Level3)
1129da853ecaSopenharmony_ci{
1130da853ecaSopenharmony_ci    int num = 0;
1131da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1132da853ecaSopenharmony_ci    const char *uri = "https://media.w3.org/2010/05/sintel/trailer.mp4";
1133da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1134da853ecaSopenharmony_ci    cout<<"num: "<<num<<endl;
1135da853ecaSopenharmony_ci    int tarckType = 0;
1136da853ecaSopenharmony_ci    bool audioIsEnd = false;
1137da853ecaSopenharmony_ci    bool videoIsEnd = false;
1138da853ecaSopenharmony_ci    int audioFrame = 0;
1139da853ecaSopenharmony_ci    int videoFrame = 0;
1140da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1141da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1142da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1143da853ecaSopenharmony_ci
1144da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1145da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1146da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1147da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1148da853ecaSopenharmony_ci            trackFormat = nullptr;
1149da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1150da853ecaSopenharmony_ci                continue;
1151da853ecaSopenharmony_ci            }
1152da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1153da853ecaSopenharmony_ci
1154da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1155da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1156da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1157da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1158da853ecaSopenharmony_ci            }
1159da853ecaSopenharmony_ci        }
1160da853ecaSopenharmony_ci    }
1161da853ecaSopenharmony_ci    num++;
1162da853ecaSopenharmony_ci}
1163da853ecaSopenharmony_ci
1164da853ecaSopenharmony_ci/**
1165da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6300
1166da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory
1167da853ecaSopenharmony_ci * @tc.desc      : function test
1168da853ecaSopenharmony_ci */
1169da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6300, TestSize.Level3)
1170da853ecaSopenharmony_ci{
1171da853ecaSopenharmony_ci    int num = 0;
1172da853ecaSopenharmony_ci    while (num < 5) {
1173da853ecaSopenharmony_ci        num++;
1174da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1175da853ecaSopenharmony_ci        // "https://media.w3.org/2010/05/sintel/trailer.mp4"
1176da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/avcc_10sec.mp4";
1177da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1178da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1179da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
1180da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1181da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1182da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1183da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1184da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1185da853ecaSopenharmony_ci        }
1186da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1187da853ecaSopenharmony_ci            val.join();
1188da853ecaSopenharmony_ci        }
1189da853ecaSopenharmony_ci
1190da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1191da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1192da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1193da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1194da853ecaSopenharmony_ci            }
1195da853ecaSopenharmony_ci
1196da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1197da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1198da853ecaSopenharmony_ci                source_list[i] = nullptr;
1199da853ecaSopenharmony_ci            }
1200da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1201da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1202da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1203da853ecaSopenharmony_ci            }
1204da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1205da853ecaSopenharmony_ci        }
1206da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1207da853ecaSopenharmony_ci    }
1208da853ecaSopenharmony_ci}
1209da853ecaSopenharmony_ci
1210da853ecaSopenharmony_ci/**
1211da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6400
1212da853ecaSopenharmony_ci * @tc.name      : create source with uri,amr_nb
1213da853ecaSopenharmony_ci * @tc.desc      : function test
1214da853ecaSopenharmony_ci */
1215da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6400, TestSize.Level0)
1216da853ecaSopenharmony_ci{
1217da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1218da853ecaSopenharmony_ci    bool isEnd = false;
1219da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/amr_nb_8000_1.amr";
1220da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1221da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1222da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1223da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1224da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1225da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1226da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1227da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1228da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1229da853ecaSopenharmony_ci    }
1230da853ecaSopenharmony_ci    int audioFrame = 0;
1231da853ecaSopenharmony_ci    int keyCount = 0;
1232da853ecaSopenharmony_ci    while (!isEnd) {
1233da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1234da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1235da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
1236da853ecaSopenharmony_ci            if (attr.flags == OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1237da853ecaSopenharmony_ci                isEnd = true;
1238da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
1239da853ecaSopenharmony_ci                continue;
1240da853ecaSopenharmony_ci            }
1241da853ecaSopenharmony_ci            audioFrame++;
1242da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1243da853ecaSopenharmony_ci                keyCount++;
1244da853ecaSopenharmony_ci            }
1245da853ecaSopenharmony_ci        }
1246da853ecaSopenharmony_ci    }
1247da853ecaSopenharmony_ci    cout << "audioFrame:" << audioFrame << "   keyCount:" << keyCount << endl;
1248da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 1501);
1249da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 1501);
1250da853ecaSopenharmony_ci}
1251da853ecaSopenharmony_ci
1252da853ecaSopenharmony_ci/**
1253da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6500
1254da853ecaSopenharmony_ci * @tc.name      : create source with uri,flac
1255da853ecaSopenharmony_ci * @tc.desc      : function test
1256da853ecaSopenharmony_ci */
1257da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6500, TestSize.Level0)
1258da853ecaSopenharmony_ci{
1259da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1260da853ecaSopenharmony_ci    bool isEnd = false;
1261da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/amr_wb_16000_1.amr";
1262da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1263da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1264da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1265da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1266da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1267da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1268da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1269da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1270da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1271da853ecaSopenharmony_ci    }
1272da853ecaSopenharmony_ci    int audioFrame = 0;
1273da853ecaSopenharmony_ci    int keyCount = 0;
1274da853ecaSopenharmony_ci    while (!isEnd) {
1275da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1276da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1277da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
1278da853ecaSopenharmony_ci            if (attr.flags == OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1279da853ecaSopenharmony_ci                isEnd = true;
1280da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
1281da853ecaSopenharmony_ci                continue;
1282da853ecaSopenharmony_ci            }
1283da853ecaSopenharmony_ci
1284da853ecaSopenharmony_ci            audioFrame++;
1285da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1286da853ecaSopenharmony_ci                keyCount++;
1287da853ecaSopenharmony_ci            }
1288da853ecaSopenharmony_ci        }
1289da853ecaSopenharmony_ci    }
1290da853ecaSopenharmony_ci    cout << "audioFrame:" << audioFrame << "   keyCount:" << keyCount << endl;
1291da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 1500);
1292da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 1500);
1293da853ecaSopenharmony_ci}
1294da853ecaSopenharmony_ci
1295da853ecaSopenharmony_ci/**
1296da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6600
1297da853ecaSopenharmony_ci * @tc.name      : create source with uri,hevc ts
1298da853ecaSopenharmony_ci * @tc.desc      : function test
1299da853ecaSopenharmony_ci */
1300da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6600, TestSize.Level0)
1301da853ecaSopenharmony_ci{
1302da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1303da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/hevc_v_a.ts";
1304da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1305da853ecaSopenharmony_ci    int tarckType = 0;
1306da853ecaSopenharmony_ci    bool audioIsEnd = false;
1307da853ecaSopenharmony_ci    bool videoIsEnd = false;
1308da853ecaSopenharmony_ci    int audioFrame = 0;
1309da853ecaSopenharmony_ci    int videoFrame = 0;
1310da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1311da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1312da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1313da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1314da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1315da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1316da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1317da853ecaSopenharmony_ci            trackFormat = nullptr;
1318da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1319da853ecaSopenharmony_ci                continue;
1320da853ecaSopenharmony_ci            }
1321da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1322da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1323da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1324da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1325da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1326da853ecaSopenharmony_ci            }
1327da853ecaSopenharmony_ci        }
1328da853ecaSopenharmony_ci    }
1329da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 384);
1330da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
1331da853ecaSopenharmony_ci}
1332da853ecaSopenharmony_ci
1333da853ecaSopenharmony_ci/**
1334da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6700
1335da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory
1336da853ecaSopenharmony_ci * @tc.desc      : function test
1337da853ecaSopenharmony_ci */
1338da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6700, TestSize.Level3)
1339da853ecaSopenharmony_ci{
1340da853ecaSopenharmony_ci    int num = 0;
1341da853ecaSopenharmony_ci    while (num < 5) {
1342da853ecaSopenharmony_ci        num++;
1343da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1344da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/hevc_v_a.ts";
1345da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1346da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1347da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
1348da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1349da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1350da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1351da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1352da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1353da853ecaSopenharmony_ci        }
1354da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1355da853ecaSopenharmony_ci            val.join();
1356da853ecaSopenharmony_ci        }
1357da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1358da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1359da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1360da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1361da853ecaSopenharmony_ci            }
1362da853ecaSopenharmony_ci
1363da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1364da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1365da853ecaSopenharmony_ci                source_list[i] = nullptr;
1366da853ecaSopenharmony_ci            }
1367da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1368da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1369da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1370da853ecaSopenharmony_ci            }
1371da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1372da853ecaSopenharmony_ci        }
1373da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1374da853ecaSopenharmony_ci    }
1375da853ecaSopenharmony_ci}
1376da853ecaSopenharmony_ci
1377da853ecaSopenharmony_ci/**
1378da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6800
1379da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory
1380da853ecaSopenharmony_ci * @tc.desc      : function test
1381da853ecaSopenharmony_ci */
1382da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6800, TestSize.Level3)
1383da853ecaSopenharmony_ci{
1384da853ecaSopenharmony_ci    int num = 0;
1385da853ecaSopenharmony_ci    int len = 256;
1386da853ecaSopenharmony_ci    while (num < 10) {
1387da853ecaSopenharmony_ci        num++;
1388da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1389da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1390da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1391da853ecaSopenharmony_ci            char file[256] = {};
1392da853ecaSopenharmony_ci            sprintf_s(file, len, "/data/test/media/16/%d_hevc_v_a.ts", i);
1393da853ecaSopenharmony_ci            g_fdList[i] = open(file, O_RDONLY);
1394da853ecaSopenharmony_ci            int64_t size = GetFileSize(file);
1395da853ecaSopenharmony_ci            cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
1396da853ecaSopenharmony_ci
1397da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
1398da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1399da853ecaSopenharmony_ci
1400da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1401da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1402da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1403da853ecaSopenharmony_ci        }
1404da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1405da853ecaSopenharmony_ci            val.join();
1406da853ecaSopenharmony_ci        }
1407da853ecaSopenharmony_ci
1408da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1409da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1410da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1411da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1412da853ecaSopenharmony_ci            }
1413da853ecaSopenharmony_ci
1414da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1415da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1416da853ecaSopenharmony_ci                source_list[i] = nullptr;
1417da853ecaSopenharmony_ci            }
1418da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1419da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1420da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1421da853ecaSopenharmony_ci            }
1422da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1423da853ecaSopenharmony_ci
1424da853ecaSopenharmony_ci            close(g_fdList[i]);
1425da853ecaSopenharmony_ci        }
1426da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1427da853ecaSopenharmony_ci    }
1428da853ecaSopenharmony_ci}
1429da853ecaSopenharmony_ci
1430da853ecaSopenharmony_ci/**
1431da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_6900
1432da853ecaSopenharmony_ci * @tc.name      : create source with uri,2 audio
1433da853ecaSopenharmony_ci * @tc.desc      : function test
1434da853ecaSopenharmony_ci */
1435da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_6900, TestSize.Level0)
1436da853ecaSopenharmony_ci{
1437da853ecaSopenharmony_ci    int tarckType = 0;
1438da853ecaSopenharmony_ci    int auidoTrackCount = 2;
1439da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1440da853ecaSopenharmony_ci    bool videoIsEnd = false;
1441da853ecaSopenharmony_ci    int videoFrame = 0;
1442da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/video_2audio.mp4";
1443da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1444da853ecaSopenharmony_ci    int audioFrame[2] = {};
1445da853ecaSopenharmony_ci    bool audioIsEnd = false;
1446da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1447da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1448da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1449da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1450da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1451da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1452da853ecaSopenharmony_ci            trackFormat = nullptr;
1453da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1454da853ecaSopenharmony_ci                continue;
1455da853ecaSopenharmony_ci            }
1456da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1457da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
1458da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1459da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
1460da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame[index-1]);
1461da853ecaSopenharmony_ci            }
1462da853ecaSopenharmony_ci        }
1463da853ecaSopenharmony_ci    }
1464da853ecaSopenharmony_ci    for (int index = 0; index < auidoTrackCount; index++) {
1465da853ecaSopenharmony_ci        ASSERT_EQ(audioFrame[index], 433);
1466da853ecaSopenharmony_ci    }
1467da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
1468da853ecaSopenharmony_ci}
1469da853ecaSopenharmony_ci
1470da853ecaSopenharmony_ci/**
1471da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7000
1472da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory
1473da853ecaSopenharmony_ci * @tc.desc      : function test
1474da853ecaSopenharmony_ci */
1475da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7000, TestSize.Level3)
1476da853ecaSopenharmony_ci{
1477da853ecaSopenharmony_ci    int num = 0;
1478da853ecaSopenharmony_ci    while (num < 10) {
1479da853ecaSopenharmony_ci        num++;
1480da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1481da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/video_2audio.mp4";
1482da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1483da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1484da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
1485da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1486da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1487da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1488da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1489da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1490da853ecaSopenharmony_ci        }
1491da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1492da853ecaSopenharmony_ci            val.join();
1493da853ecaSopenharmony_ci        }
1494da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1495da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1496da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1497da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1498da853ecaSopenharmony_ci            }
1499da853ecaSopenharmony_ci
1500da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1501da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1502da853ecaSopenharmony_ci                source_list[i] = nullptr;
1503da853ecaSopenharmony_ci            }
1504da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1505da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1506da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1507da853ecaSopenharmony_ci            }
1508da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1509da853ecaSopenharmony_ci        }
1510da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1511da853ecaSopenharmony_ci    }
1512da853ecaSopenharmony_ci}
1513da853ecaSopenharmony_ci
1514da853ecaSopenharmony_cistatic void SetAudioValue(OH_AVCodecBufferAttr attr, bool &audioIsEnd, int &audioFrame, int &aKeyCount)
1515da853ecaSopenharmony_ci{
1516da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1517da853ecaSopenharmony_ci        audioIsEnd = true;
1518da853ecaSopenharmony_ci        cout << audioFrame << "    audio is end !!!!!!!!!!!!!!!" << endl;
1519da853ecaSopenharmony_ci    } else {
1520da853ecaSopenharmony_ci        audioFrame++;
1521da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1522da853ecaSopenharmony_ci            aKeyCount++;
1523da853ecaSopenharmony_ci        }
1524da853ecaSopenharmony_ci    }
1525da853ecaSopenharmony_ci}
1526da853ecaSopenharmony_ci
1527da853ecaSopenharmony_cistatic void SetVideoValue(OH_AVCodecBufferAttr attr, bool &videoIsEnd, int &videoFrame, int &vKeyCount)
1528da853ecaSopenharmony_ci{
1529da853ecaSopenharmony_ci    if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1530da853ecaSopenharmony_ci        videoIsEnd = true;
1531da853ecaSopenharmony_ci        cout << videoFrame << "   video is end !!!!!!!!!!!!!!!" << endl;
1532da853ecaSopenharmony_ci    } else {
1533da853ecaSopenharmony_ci        videoFrame++;
1534da853ecaSopenharmony_ci        cout << "video track !!!!!" << endl;
1535da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1536da853ecaSopenharmony_ci            vKeyCount++;
1537da853ecaSopenharmony_ci        }
1538da853ecaSopenharmony_ci    }
1539da853ecaSopenharmony_ci}
1540da853ecaSopenharmony_ci
1541da853ecaSopenharmony_ci/**
1542da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7100
1543da853ecaSopenharmony_ci * @tc.name      : demuxer hevc+aac flv video file
1544da853ecaSopenharmony_ci * @tc.desc      : function test
1545da853ecaSopenharmony_ci */
1546da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7100, TestSize.Level3)
1547da853ecaSopenharmony_ci{
1548da853ecaSopenharmony_ci    int tarckType = 0;
1549da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1550da853ecaSopenharmony_ci    bool videoIsEnd = false;
1551da853ecaSopenharmony_ci    int videoFrame = 0;
1552da853ecaSopenharmony_ci    const char *file = "/data/test/media/hevc_aac_c.flv";
1553da853ecaSopenharmony_ci    int fd = open(file, O_RDONLY);
1554da853ecaSopenharmony_ci    int64_t size = GetFileSize(file);
1555da853ecaSopenharmony_ci    cout << file << "----------------------" << fd << "---------" << size << endl;
1556da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithFD(fd, 0, size);
1557da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1558da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1559da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1560da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1561da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1562da853ecaSopenharmony_ci    ASSERT_EQ(2, g_trackCount);
1563da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1564da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1565da853ecaSopenharmony_ci    }
1566da853ecaSopenharmony_ci    int vKeyCount = 0;
1567da853ecaSopenharmony_ci    int aKeyCount = 0;
1568da853ecaSopenharmony_ci    int audioFrame = 0;
1569da853ecaSopenharmony_ci    bool audioIsEnd = false;
1570da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1571da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1572da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1573da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1574da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1575da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1576da853ecaSopenharmony_ci            trackFormat = nullptr;
1577da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1578da853ecaSopenharmony_ci                continue;
1579da853ecaSopenharmony_ci            }
1580da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1581da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_VID) {
1582da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount);
1583da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_AUD) {
1584da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount);
1585da853ecaSopenharmony_ci            }
1586da853ecaSopenharmony_ci        }
1587da853ecaSopenharmony_ci    }
1588da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 11208);
1589da853ecaSopenharmony_ci    ASSERT_EQ(aKeyCount, 11208);
1590da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 6506);
1591da853ecaSopenharmony_ci    ASSERT_EQ(vKeyCount, 39);
1592da853ecaSopenharmony_ci    close(fd);
1593da853ecaSopenharmony_ci}
1594da853ecaSopenharmony_ci
1595da853ecaSopenharmony_ci/**
1596da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7200
1597da853ecaSopenharmony_ci * @tc.name      : create source with uri,flv
1598da853ecaSopenharmony_ci * @tc.desc      : function test
1599da853ecaSopenharmony_ci */
1600da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7200, TestSize.Level0)
1601da853ecaSopenharmony_ci{
1602da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1603da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/avc_mp3.flv";
1604da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1605da853ecaSopenharmony_ci    int tarckType = 0;
1606da853ecaSopenharmony_ci    bool audioIsEnd = false;
1607da853ecaSopenharmony_ci    bool videoIsEnd = false;
1608da853ecaSopenharmony_ci    int audioFrame = 0;
1609da853ecaSopenharmony_ci    int videoFrame = 0;
1610da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1611da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1612da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1613da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1614da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1615da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1616da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1617da853ecaSopenharmony_ci            trackFormat = nullptr;
1618da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1619da853ecaSopenharmony_ci                continue;
1620da853ecaSopenharmony_ci            }
1621da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1622da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1623da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1624da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1625da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1626da853ecaSopenharmony_ci            }
1627da853ecaSopenharmony_ci        }
1628da853ecaSopenharmony_ci    }
1629da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 385);
1630da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 602);
1631da853ecaSopenharmony_ci}
1632da853ecaSopenharmony_ci
1633da853ecaSopenharmony_ci/**
1634da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7300
1635da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory
1636da853ecaSopenharmony_ci * @tc.desc      : function test
1637da853ecaSopenharmony_ci */
1638da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7300, TestSize.Level3)
1639da853ecaSopenharmony_ci{
1640da853ecaSopenharmony_ci    int num = 0;
1641da853ecaSopenharmony_ci    while (num < 10) {
1642da853ecaSopenharmony_ci        num++;
1643da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1644da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/avc_mp3.flv";
1645da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1646da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1647da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
1648da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1649da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1650da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1651da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1652da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1653da853ecaSopenharmony_ci        }
1654da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1655da853ecaSopenharmony_ci            val.join();
1656da853ecaSopenharmony_ci        }
1657da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1658da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1659da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1660da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1661da853ecaSopenharmony_ci            }
1662da853ecaSopenharmony_ci
1663da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1664da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1665da853ecaSopenharmony_ci                source_list[i] = nullptr;
1666da853ecaSopenharmony_ci            }
1667da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1668da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1669da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1670da853ecaSopenharmony_ci            }
1671da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1672da853ecaSopenharmony_ci        }
1673da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1674da853ecaSopenharmony_ci    }
1675da853ecaSopenharmony_ci}
1676da853ecaSopenharmony_ci
1677da853ecaSopenharmony_ci/**
1678da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7400
1679da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory
1680da853ecaSopenharmony_ci * @tc.desc      : function test
1681da853ecaSopenharmony_ci */
1682da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7400, TestSize.Level3)
1683da853ecaSopenharmony_ci{
1684da853ecaSopenharmony_ci    int num = 0;
1685da853ecaSopenharmony_ci    int len = 256;
1686da853ecaSopenharmony_ci    while (num < 10) {
1687da853ecaSopenharmony_ci        num++;
1688da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1689da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1690da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1691da853ecaSopenharmony_ci            char file[256] = {};
1692da853ecaSopenharmony_ci            sprintf_s(file, len, "/data/test/media/16/%d_avc_mp3.flv", i);
1693da853ecaSopenharmony_ci            g_fdList[i] = open(file, O_RDONLY);
1694da853ecaSopenharmony_ci            int64_t size = GetFileSize(file);
1695da853ecaSopenharmony_ci            cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
1696da853ecaSopenharmony_ci
1697da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
1698da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1699da853ecaSopenharmony_ci
1700da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1701da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1702da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1703da853ecaSopenharmony_ci        }
1704da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1705da853ecaSopenharmony_ci            val.join();
1706da853ecaSopenharmony_ci        }
1707da853ecaSopenharmony_ci
1708da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1709da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1710da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1711da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1712da853ecaSopenharmony_ci            }
1713da853ecaSopenharmony_ci
1714da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1715da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1716da853ecaSopenharmony_ci                source_list[i] = nullptr;
1717da853ecaSopenharmony_ci            }
1718da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1719da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1720da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1721da853ecaSopenharmony_ci            }
1722da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1723da853ecaSopenharmony_ci
1724da853ecaSopenharmony_ci            close(g_fdList[i]);
1725da853ecaSopenharmony_ci        }
1726da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1727da853ecaSopenharmony_ci    }
1728da853ecaSopenharmony_ci}
1729da853ecaSopenharmony_ci
1730da853ecaSopenharmony_ci/**
1731da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7500
1732da853ecaSopenharmony_ci * @tc.name      : create source with uri,ape
1733da853ecaSopenharmony_ci * @tc.desc      : function test
1734da853ecaSopenharmony_ci */
1735da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7500, TestSize.Level0)
1736da853ecaSopenharmony_ci{
1737da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1738da853ecaSopenharmony_ci    bool isEnd = false;
1739da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/ape.ape";
1740da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1741da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1742da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
1743da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
1744da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
1745da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
1746da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
1747da853ecaSopenharmony_ci    for (int32_t index = 0; index < g_trackCount; index++) {
1748da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index));
1749da853ecaSopenharmony_ci    }
1750da853ecaSopenharmony_ci    int audioFrame = 0;
1751da853ecaSopenharmony_ci    int keyCount = 0;
1752da853ecaSopenharmony_ci    while (!isEnd) {
1753da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1754da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1755da853ecaSopenharmony_ci            cout << attr.size << "size---------------pts:" << attr.pts << endl;
1756da853ecaSopenharmony_ci            if (attr.flags == OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
1757da853ecaSopenharmony_ci                isEnd = true;
1758da853ecaSopenharmony_ci                cout << "isend !!!!!!!!!!!!!!!" << endl;
1759da853ecaSopenharmony_ci                continue;
1760da853ecaSopenharmony_ci            }
1761da853ecaSopenharmony_ci            audioFrame++;
1762da853ecaSopenharmony_ci            if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) {
1763da853ecaSopenharmony_ci                keyCount++;
1764da853ecaSopenharmony_ci            }
1765da853ecaSopenharmony_ci        }
1766da853ecaSopenharmony_ci    }
1767da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 8);
1768da853ecaSopenharmony_ci    ASSERT_EQ(keyCount, 8);
1769da853ecaSopenharmony_ci}
1770da853ecaSopenharmony_ci
1771da853ecaSopenharmony_ci/**
1772da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7600
1773da853ecaSopenharmony_ci * @tc.name      : demuxer h264+mp3 fmp4 network
1774da853ecaSopenharmony_ci * @tc.desc      : function test
1775da853ecaSopenharmony_ci */
1776da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7600, TestSize.Level2)
1777da853ecaSopenharmony_ci{
1778da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1779da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/h264_mp3_3mevx_fmp4.mp4";
1780da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1781da853ecaSopenharmony_ci    int tarckType = 0;
1782da853ecaSopenharmony_ci    bool audioIsEnd = false;
1783da853ecaSopenharmony_ci    bool videoIsEnd = false;
1784da853ecaSopenharmony_ci    int audioFrame = 0;
1785da853ecaSopenharmony_ci    int videoFrame = 0;
1786da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1787da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1788da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1789da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1790da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1791da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1792da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1793da853ecaSopenharmony_ci            trackFormat = nullptr;
1794da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1795da853ecaSopenharmony_ci                continue;
1796da853ecaSopenharmony_ci            }
1797da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1798da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1799da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1800da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1801da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1802da853ecaSopenharmony_ci            }
1803da853ecaSopenharmony_ci        }
1804da853ecaSopenharmony_ci    }
1805da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 465);
1806da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 369);
1807da853ecaSopenharmony_ci}
1808da853ecaSopenharmony_ci
1809da853ecaSopenharmony_ci/**
1810da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7700
1811da853ecaSopenharmony_ci * @tc.name      : demuxer h265+aac fmp4 network
1812da853ecaSopenharmony_ci * @tc.desc      : function test
1813da853ecaSopenharmony_ci */
1814da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7700, TestSize.Level2)
1815da853ecaSopenharmony_ci{
1816da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1817da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/h265_aac_1mvex_fmp4.mp4";
1818da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1819da853ecaSopenharmony_ci    int tarckType = 0;
1820da853ecaSopenharmony_ci    bool audioIsEnd = false;
1821da853ecaSopenharmony_ci    bool videoIsEnd = false;
1822da853ecaSopenharmony_ci    int audioFrame = 0;
1823da853ecaSopenharmony_ci    int videoFrame = 0;
1824da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1825da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1826da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1827da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1828da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1829da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1830da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1831da853ecaSopenharmony_ci            trackFormat = nullptr;
1832da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1833da853ecaSopenharmony_ci                continue;
1834da853ecaSopenharmony_ci            }
1835da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1836da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1837da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1838da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1839da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1840da853ecaSopenharmony_ci            }
1841da853ecaSopenharmony_ci        }
1842da853ecaSopenharmony_ci    }
1843da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 173);
1844da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 242);
1845da853ecaSopenharmony_ci}
1846da853ecaSopenharmony_ci
1847da853ecaSopenharmony_ci/**
1848da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7800
1849da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory h265+aac fmp4 file
1850da853ecaSopenharmony_ci * @tc.desc      : function test
1851da853ecaSopenharmony_ci */
1852da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7800, TestSize.Level3)
1853da853ecaSopenharmony_ci{
1854da853ecaSopenharmony_ci    int num = 0;
1855da853ecaSopenharmony_ci    int len = 256;
1856da853ecaSopenharmony_ci    while (num < 1000) {
1857da853ecaSopenharmony_ci        num++;
1858da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1859da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1860da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1861da853ecaSopenharmony_ci            char file[256] = {};
1862da853ecaSopenharmony_ci            sprintf_s(file, len, "/data/test/media/16/%d_h265_aac_1mvex_fmp4.mp4", i);
1863da853ecaSopenharmony_ci            g_fdList[i] = open(file, O_RDONLY);
1864da853ecaSopenharmony_ci            int64_t size = GetFileSize(file);
1865da853ecaSopenharmony_ci            cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
1866da853ecaSopenharmony_ci
1867da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
1868da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1869da853ecaSopenharmony_ci
1870da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1871da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1872da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1873da853ecaSopenharmony_ci        }
1874da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1875da853ecaSopenharmony_ci            val.join();
1876da853ecaSopenharmony_ci        }
1877da853ecaSopenharmony_ci
1878da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1879da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1880da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1881da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1882da853ecaSopenharmony_ci            }
1883da853ecaSopenharmony_ci
1884da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1885da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1886da853ecaSopenharmony_ci                source_list[i] = nullptr;
1887da853ecaSopenharmony_ci            }
1888da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1889da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1890da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1891da853ecaSopenharmony_ci            }
1892da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1893da853ecaSopenharmony_ci
1894da853ecaSopenharmony_ci            close(g_fdList[i]);
1895da853ecaSopenharmony_ci        }
1896da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1897da853ecaSopenharmony_ci    }
1898da853ecaSopenharmony_ci}
1899da853ecaSopenharmony_ci
1900da853ecaSopenharmony_ci/**
1901da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_7900
1902da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory h264+mp3 fmp4 network
1903da853ecaSopenharmony_ci * @tc.desc      : function test
1904da853ecaSopenharmony_ci */
1905da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_7900, TestSize.Level3)
1906da853ecaSopenharmony_ci{
1907da853ecaSopenharmony_ci    int num = 0;
1908da853ecaSopenharmony_ci    while (num < 1000) {
1909da853ecaSopenharmony_ci        num++;
1910da853ecaSopenharmony_ci        vector<std::thread> vecThread;
1911da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/h264_mp3_3mevx_fmp4.mp4";
1912da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1913da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
1914da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
1915da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
1916da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
1917da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
1918da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
1919da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
1920da853ecaSopenharmony_ci        }
1921da853ecaSopenharmony_ci        for (auto &val : vecThread) {
1922da853ecaSopenharmony_ci            val.join();
1923da853ecaSopenharmony_ci        }
1924da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
1925da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
1926da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
1927da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
1928da853ecaSopenharmony_ci            }
1929da853ecaSopenharmony_ci
1930da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
1931da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
1932da853ecaSopenharmony_ci                source_list[i] = nullptr;
1933da853ecaSopenharmony_ci            }
1934da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
1935da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
1936da853ecaSopenharmony_ci                memory_list[i] = nullptr;
1937da853ecaSopenharmony_ci            }
1938da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
1939da853ecaSopenharmony_ci        }
1940da853ecaSopenharmony_ci        cout << "num: " << num << endl;
1941da853ecaSopenharmony_ci    }
1942da853ecaSopenharmony_ci}
1943da853ecaSopenharmony_ci
1944da853ecaSopenharmony_ci/**
1945da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8000
1946da853ecaSopenharmony_ci * @tc.name      : demuxer h264+aac ts hls network
1947da853ecaSopenharmony_ci * @tc.desc      : function test
1948da853ecaSopenharmony_ci */
1949da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8000, TestSize.Level0)
1950da853ecaSopenharmony_ci{
1951da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1952da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/h264_aac.m3u8";
1953da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1954da853ecaSopenharmony_ci    int tarckType = 0;
1955da853ecaSopenharmony_ci    bool audioIsEnd = false;
1956da853ecaSopenharmony_ci    bool videoIsEnd = false;
1957da853ecaSopenharmony_ci    int audioFrame = 0;
1958da853ecaSopenharmony_ci    int videoFrame = 0;
1959da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1960da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1961da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
1962da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
1963da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
1964da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
1965da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
1966da853ecaSopenharmony_ci            trackFormat = nullptr;
1967da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
1968da853ecaSopenharmony_ci                continue;
1969da853ecaSopenharmony_ci            }
1970da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
1971da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
1972da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
1973da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
1974da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
1975da853ecaSopenharmony_ci            }
1976da853ecaSopenharmony_ci        }
1977da853ecaSopenharmony_ci    }
1978da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 528);
1979da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 369);
1980da853ecaSopenharmony_ci}
1981da853ecaSopenharmony_ci
1982da853ecaSopenharmony_ci/**
1983da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8100
1984da853ecaSopenharmony_ci * @tc.name      : demuxer h265+mp3 ts hls network
1985da853ecaSopenharmony_ci * @tc.desc      : function test
1986da853ecaSopenharmony_ci */
1987da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8100, TestSize.Level0)
1988da853ecaSopenharmony_ci{
1989da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
1990da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/h265_mp3.m3u8";
1991da853ecaSopenharmony_ci    cout << uri << "------" << endl;
1992da853ecaSopenharmony_ci    int tarckType = 0;
1993da853ecaSopenharmony_ci    bool audioIsEnd = false;
1994da853ecaSopenharmony_ci    bool videoIsEnd = false;
1995da853ecaSopenharmony_ci    int audioFrame = 0;
1996da853ecaSopenharmony_ci    int videoFrame = 0;
1997da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
1998da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
1999da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
2000da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
2001da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
2002da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2003da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
2004da853ecaSopenharmony_ci            trackFormat = nullptr;
2005da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
2006da853ecaSopenharmony_ci                continue;
2007da853ecaSopenharmony_ci            }
2008da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
2009da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
2010da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
2011da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
2012da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
2013da853ecaSopenharmony_ci            }
2014da853ecaSopenharmony_ci        }
2015da853ecaSopenharmony_ci    }
2016da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 465);
2017da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 726);
2018da853ecaSopenharmony_ci}
2019da853ecaSopenharmony_ci
2020da853ecaSopenharmony_ci/**
2021da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8200
2022da853ecaSopenharmony_ci * @tc.name      : demuxer first level index hls network
2023da853ecaSopenharmony_ci * @tc.desc      : function test
2024da853ecaSopenharmony_ci */
2025da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8200, TestSize.Level2)
2026da853ecaSopenharmony_ci{
2027da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2028da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/first_level.m3u8";
2029da853ecaSopenharmony_ci    cout << uri << "------" << endl;
2030da853ecaSopenharmony_ci    int tarckType = 0;
2031da853ecaSopenharmony_ci    bool audioIsEnd = false;
2032da853ecaSopenharmony_ci    bool videoIsEnd = false;
2033da853ecaSopenharmony_ci    int audioFrame = 0;
2034da853ecaSopenharmony_ci    int videoFrame = 0;
2035da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
2036da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
2037da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
2038da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
2039da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
2040da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2041da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
2042da853ecaSopenharmony_ci            trackFormat = nullptr;
2043da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
2044da853ecaSopenharmony_ci                continue;
2045da853ecaSopenharmony_ci            }
2046da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
2047da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
2048da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
2049da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
2050da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
2051da853ecaSopenharmony_ci            }
2052da853ecaSopenharmony_ci        }
2053da853ecaSopenharmony_ci    }
2054da853ecaSopenharmony_ci    cout << audioFrame << "audioFrame" << endl;
2055da853ecaSopenharmony_ci    cout << videoFrame << "videoFrame" << endl;
2056da853ecaSopenharmony_ci}
2057da853ecaSopenharmony_ci
2058da853ecaSopenharmony_ci/**
2059da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8300
2060da853ecaSopenharmony_ci * @tc.name      : demuxer fixed path slicing hls network
2061da853ecaSopenharmony_ci * @tc.desc      : function test
2062da853ecaSopenharmony_ci */
2063da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8300, TestSize.Level2)
2064da853ecaSopenharmony_ci{
2065da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2066da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/fixed_path.m3u8";
2067da853ecaSopenharmony_ci    cout << uri << "------" << endl;
2068da853ecaSopenharmony_ci    int tarckType = 0;
2069da853ecaSopenharmony_ci    bool audioIsEnd = false;
2070da853ecaSopenharmony_ci    bool videoIsEnd = false;
2071da853ecaSopenharmony_ci    int audioFrame = 0;
2072da853ecaSopenharmony_ci    int videoFrame = 0;
2073da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
2074da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
2075da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
2076da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
2077da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
2078da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2079da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
2080da853ecaSopenharmony_ci            trackFormat = nullptr;
2081da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
2082da853ecaSopenharmony_ci                continue;
2083da853ecaSopenharmony_ci            }
2084da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
2085da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
2086da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
2087da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
2088da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
2089da853ecaSopenharmony_ci            }
2090da853ecaSopenharmony_ci        }
2091da853ecaSopenharmony_ci    }
2092da853ecaSopenharmony_ci    ASSERT_EQ(audioFrame, 465);
2093da853ecaSopenharmony_ci    ASSERT_EQ(videoFrame, 726);
2094da853ecaSopenharmony_ci}
2095da853ecaSopenharmony_ci
2096da853ecaSopenharmony_ci/**
2097da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8400
2098da853ecaSopenharmony_ci * @tc.name      : demuxer different sharded videos hls network
2099da853ecaSopenharmony_ci * @tc.desc      : function test
2100da853ecaSopenharmony_ci */
2101da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8400, TestSize.Level2)
2102da853ecaSopenharmony_ci{
2103da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2104da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/differemt_videos.m3u8";
2105da853ecaSopenharmony_ci    cout << uri << "------" << endl;
2106da853ecaSopenharmony_ci    int tarckType = 0;
2107da853ecaSopenharmony_ci    bool audioIsEnd = false;
2108da853ecaSopenharmony_ci    bool videoIsEnd = false;
2109da853ecaSopenharmony_ci    int audioFrame = 0;
2110da853ecaSopenharmony_ci    int videoFrame = 0;
2111da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
2112da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
2113da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
2114da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
2115da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
2116da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2117da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
2118da853ecaSopenharmony_ci            trackFormat = nullptr;
2119da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
2120da853ecaSopenharmony_ci                continue;
2121da853ecaSopenharmony_ci            }
2122da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
2123da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
2124da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
2125da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
2126da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
2127da853ecaSopenharmony_ci            }
2128da853ecaSopenharmony_ci        }
2129da853ecaSopenharmony_ci    }
2130da853ecaSopenharmony_ci}
2131da853ecaSopenharmony_ci
2132da853ecaSopenharmony_ci/**
2133da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8500
2134da853ecaSopenharmony_ci * @tc.name      : demuxer duration greater than TARGETDURATION hls network
2135da853ecaSopenharmony_ci * @tc.desc      : function test
2136da853ecaSopenharmony_ci */
2137da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8500, TestSize.Level2)
2138da853ecaSopenharmony_ci{
2139da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2140da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/duration_error.m3u8";
2141da853ecaSopenharmony_ci    cout << uri << "------" << endl;
2142da853ecaSopenharmony_ci    int tarckType = 0;
2143da853ecaSopenharmony_ci    bool audioIsEnd = false;
2144da853ecaSopenharmony_ci    bool videoIsEnd = false;
2145da853ecaSopenharmony_ci    int audioFrame = 0;
2146da853ecaSopenharmony_ci    int videoFrame = 0;
2147da853ecaSopenharmony_ci    CreateDemuxer(const_cast<char *>(uri));
2148da853ecaSopenharmony_ci    while (!audioIsEnd || !videoIsEnd) {
2149da853ecaSopenharmony_ci        for (int32_t index = 0; index < g_trackCount; index++) {
2150da853ecaSopenharmony_ci            trackFormat = OH_AVSource_GetTrackFormat(source, index);
2151da853ecaSopenharmony_ci            ASSERT_NE(trackFormat, nullptr);
2152da853ecaSopenharmony_ci            ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType));
2153da853ecaSopenharmony_ci            OH_AVFormat_Destroy(trackFormat);
2154da853ecaSopenharmony_ci            trackFormat = nullptr;
2155da853ecaSopenharmony_ci            if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) {
2156da853ecaSopenharmony_ci                continue;
2157da853ecaSopenharmony_ci            }
2158da853ecaSopenharmony_ci            ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr));
2159da853ecaSopenharmony_ci            if (tarckType == MEDIA_TYPE_AUD) {
2160da853ecaSopenharmony_ci                SetAudioValue(attr, audioIsEnd, audioFrame);
2161da853ecaSopenharmony_ci            } else if (tarckType == MEDIA_TYPE_VID) {
2162da853ecaSopenharmony_ci                SetVideoValue(attr, videoIsEnd, videoFrame);
2163da853ecaSopenharmony_ci            }
2164da853ecaSopenharmony_ci        }
2165da853ecaSopenharmony_ci    }
2166da853ecaSopenharmony_ci}
2167da853ecaSopenharmony_ci
2168da853ecaSopenharmony_ci/**
2169da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8600
2170da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory h264+aac ts file
2171da853ecaSopenharmony_ci * @tc.desc      : function test
2172da853ecaSopenharmony_ci */
2173da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8600, TestSize.Level3)
2174da853ecaSopenharmony_ci{
2175da853ecaSopenharmony_ci    int num = 0;
2176da853ecaSopenharmony_ci    int len = 256;
2177da853ecaSopenharmony_ci    while (num < 1000) {
2178da853ecaSopenharmony_ci        num++;
2179da853ecaSopenharmony_ci        vector<std::thread> vecThread;
2180da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2181da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
2182da853ecaSopenharmony_ci            char file[256] = {};
2183da853ecaSopenharmony_ci            sprintf_s(file, len, "/data/test/media/16/%d_h264_aac.m3u8", i);
2184da853ecaSopenharmony_ci            g_fdList[i] = open(file, O_RDONLY);
2185da853ecaSopenharmony_ci            int64_t size = GetFileSize(file);
2186da853ecaSopenharmony_ci            cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
2187da853ecaSopenharmony_ci
2188da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
2189da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
2190da853ecaSopenharmony_ci
2191da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
2192da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
2193da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
2194da853ecaSopenharmony_ci        }
2195da853ecaSopenharmony_ci        for (auto &val : vecThread) {
2196da853ecaSopenharmony_ci            val.join();
2197da853ecaSopenharmony_ci        }
2198da853ecaSopenharmony_ci
2199da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2200da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
2201da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
2202da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
2203da853ecaSopenharmony_ci            }
2204da853ecaSopenharmony_ci
2205da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
2206da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
2207da853ecaSopenharmony_ci                source_list[i] = nullptr;
2208da853ecaSopenharmony_ci            }
2209da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
2210da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
2211da853ecaSopenharmony_ci                memory_list[i] = nullptr;
2212da853ecaSopenharmony_ci            }
2213da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
2214da853ecaSopenharmony_ci
2215da853ecaSopenharmony_ci            close(g_fdList[i]);
2216da853ecaSopenharmony_ci        }
2217da853ecaSopenharmony_ci        cout << "num: " << num << endl;
2218da853ecaSopenharmony_ci    }
2219da853ecaSopenharmony_ci}
2220da853ecaSopenharmony_ci
2221da853ecaSopenharmony_ci/**
2222da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8700
2223da853ecaSopenharmony_ci * @tc.name      : create 16 instances create-destory h265+mp3 ts network
2224da853ecaSopenharmony_ci * @tc.desc      : function test
2225da853ecaSopenharmony_ci */
2226da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8700, TestSize.Level3)
2227da853ecaSopenharmony_ci{
2228da853ecaSopenharmony_ci    int num = 0;
2229da853ecaSopenharmony_ci    while (num < 1000) {
2230da853ecaSopenharmony_ci        num++;
2231da853ecaSopenharmony_ci        vector<std::thread> vecThread;
2232da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/h265_mp3.m3u8";
2233da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2234da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
2235da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
2236da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
2237da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
2238da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
2239da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
2240da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxFunc, i, num);
2241da853ecaSopenharmony_ci        }
2242da853ecaSopenharmony_ci        for (auto &val : vecThread) {
2243da853ecaSopenharmony_ci            val.join();
2244da853ecaSopenharmony_ci        }
2245da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2246da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
2247da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
2248da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
2249da853ecaSopenharmony_ci            }
2250da853ecaSopenharmony_ci
2251da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
2252da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
2253da853ecaSopenharmony_ci                source_list[i] = nullptr;
2254da853ecaSopenharmony_ci            }
2255da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
2256da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
2257da853ecaSopenharmony_ci                memory_list[i] = nullptr;
2258da853ecaSopenharmony_ci            }
2259da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
2260da853ecaSopenharmony_ci        }
2261da853ecaSopenharmony_ci        cout << "num: " << num << endl;
2262da853ecaSopenharmony_ci    }
2263da853ecaSopenharmony_ci}
2264da853ecaSopenharmony_ci
2265da853ecaSopenharmony_ci/**
2266da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8800
2267da853ecaSopenharmony_ci * @tc.name      : create srt demuxer with uri and read
2268da853ecaSopenharmony_ci * @tc.desc      : function test
2269da853ecaSopenharmony_ci */
2270da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8800, TestSize.Level2)
2271da853ecaSopenharmony_ci{
2272da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2273da853ecaSopenharmony_ci    int srtIndex = 1;
2274da853ecaSopenharmony_ci    int srtSubtitle = 0;
2275da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/srt_test.srt";
2276da853ecaSopenharmony_ci    cout << uri << "------" << endl;
2277da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
2278da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2279da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2280da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2281da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2282da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
2283da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
2284da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
2285da853ecaSopenharmony_ci    while (true) {
2286da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2287da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
2288da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
2289da853ecaSopenharmony_ci            break;
2290da853ecaSopenharmony_ci        }
2291da853ecaSopenharmony_ci        uint8_t *data = OH_AVMemory_GetAddr(memory);
2292da853ecaSopenharmony_ci        srtSubtitle = atoi(reinterpret_cast<const char*>(data));
2293da853ecaSopenharmony_ci        cout << "subtitle" << "----------------" << srtSubtitle << "-----------------" << endl;
2294da853ecaSopenharmony_ci        ASSERT_EQ(srtSubtitle, srtIndex);
2295da853ecaSopenharmony_ci        srtIndex++;
2296da853ecaSopenharmony_ci    }
2297da853ecaSopenharmony_ci}
2298da853ecaSopenharmony_ci
2299da853ecaSopenharmony_ci/**
2300da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_8900
2301da853ecaSopenharmony_ci * @tc.name      : create srt demuxer with uri and seek+read
2302da853ecaSopenharmony_ci * @tc.desc      : function test
2303da853ecaSopenharmony_ci */
2304da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_8900, TestSize.Level2)
2305da853ecaSopenharmony_ci{
2306da853ecaSopenharmony_ci    OH_AVCodecBufferAttr attr;
2307da853ecaSopenharmony_ci    int srtIndex = 1;
2308da853ecaSopenharmony_ci    int srtSubtitle = 0;
2309da853ecaSopenharmony_ci    uint8_t *data;
2310da853ecaSopenharmony_ci    const char *uri = "http://192.168.3.11:8080/share/srt_test.srt";
2311da853ecaSopenharmony_ci    cout << uri << "------" << endl;
2312da853ecaSopenharmony_ci    source = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
2313da853ecaSopenharmony_ci    ASSERT_NE(source, nullptr);
2314da853ecaSopenharmony_ci    demuxer = OH_AVDemuxer_CreateWithSource(source);
2315da853ecaSopenharmony_ci    ASSERT_NE(demuxer, nullptr);
2316da853ecaSopenharmony_ci    sourceFormat = OH_AVSource_GetSourceFormat(source);
2317da853ecaSopenharmony_ci    ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount));
2318da853ecaSopenharmony_ci    ASSERT_EQ(1, g_trackCount);
2319da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0));
2320da853ecaSopenharmony_ci
2321da853ecaSopenharmony_ci    for (int index = 0; index < 5; index++) {
2322da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2323da853ecaSopenharmony_ci        data = OH_AVMemory_GetAddr(memory);
2324da853ecaSopenharmony_ci        srtSubtitle = atoi(reinterpret_cast<const char*>(data));
2325da853ecaSopenharmony_ci        cout << "subtitle"<< "----------------" << srtSubtitle << "-----------------" << endl;
2326da853ecaSopenharmony_ci        ASSERT_EQ(srtSubtitle, srtIndex);
2327da853ecaSopenharmony_ci        srtIndex++;
2328da853ecaSopenharmony_ci    }
2329da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, 5400, SEEK_MODE_CLOSEST_SYNC));
2330da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2331da853ecaSopenharmony_ci    data = OH_AVMemory_GetAddr(memory);
2332da853ecaSopenharmony_ci    srtSubtitle = atoi(reinterpret_cast<const char*>(data));
2333da853ecaSopenharmony_ci    cout << "subtitle"<< "----------------" << srtSubtitle << "-----------------" << endl;
2334da853ecaSopenharmony_ci    srtIndex = 2;
2335da853ecaSopenharmony_ci    ASSERT_EQ(srtSubtitle, srtIndex);
2336da853ecaSopenharmony_ci
2337da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, 21400, SEEK_MODE_CLOSEST_SYNC));
2338da853ecaSopenharmony_ci    ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2339da853ecaSopenharmony_ci    data = OH_AVMemory_GetAddr(memory);
2340da853ecaSopenharmony_ci    srtSubtitle = atoi(reinterpret_cast<const char*>(data));
2341da853ecaSopenharmony_ci    cout << "subtitle"<< "----------------" << srtSubtitle << "-----------------" << endl;
2342da853ecaSopenharmony_ci    srtIndex = 7;
2343da853ecaSopenharmony_ci    ASSERT_EQ(srtSubtitle, srtIndex);
2344da853ecaSopenharmony_ci
2345da853ecaSopenharmony_ci    while (true) {
2346da853ecaSopenharmony_ci        ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr));
2347da853ecaSopenharmony_ci        if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) {
2348da853ecaSopenharmony_ci            cout << "   srt is end !!!!!!!!!!!!!!!" << endl;
2349da853ecaSopenharmony_ci            break;
2350da853ecaSopenharmony_ci        }
2351da853ecaSopenharmony_ci        data = OH_AVMemory_GetAddr(memory);
2352da853ecaSopenharmony_ci        srtSubtitle = atoi(reinterpret_cast<const char*>(data));
2353da853ecaSopenharmony_ci        cout << "subtitle"<< "----------------" << srtSubtitle << "-----------------" << endl;
2354da853ecaSopenharmony_ci        srtIndex++;
2355da853ecaSopenharmony_ci        ASSERT_EQ(srtSubtitle, srtIndex);
2356da853ecaSopenharmony_ci    }
2357da853ecaSopenharmony_ci}
2358da853ecaSopenharmony_ci
2359da853ecaSopenharmony_ci/**
2360da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_9000
2361da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory with srt file
2362da853ecaSopenharmony_ci * @tc.desc      : function test
2363da853ecaSopenharmony_ci */
2364da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_9000, TestSize.Level3)
2365da853ecaSopenharmony_ci{
2366da853ecaSopenharmony_ci    int num = 0;
2367da853ecaSopenharmony_ci    int len = 256;
2368da853ecaSopenharmony_ci    while (num < 10) {
2369da853ecaSopenharmony_ci        num++;
2370da853ecaSopenharmony_ci        vector<std::thread> vecThread;
2371da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2372da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
2373da853ecaSopenharmony_ci            char file[256] = {};
2374da853ecaSopenharmony_ci            sprintf_s(file, len, "/data/test/media/16/%d_srt_test.srt", i);
2375da853ecaSopenharmony_ci            g_fdList[i] = open(file, O_RDONLY);
2376da853ecaSopenharmony_ci            int64_t size = GetFileSize(file);
2377da853ecaSopenharmony_ci            cout << file << "----------------------" << g_fdList[i] << "---------" << size << endl;
2378da853ecaSopenharmony_ci
2379da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithFD(g_fdList[i], 0, size);
2380da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
2381da853ecaSopenharmony_ci
2382da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
2383da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
2384da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxSrtFunc, i, num);
2385da853ecaSopenharmony_ci        }
2386da853ecaSopenharmony_ci        for (auto &val : vecThread) {
2387da853ecaSopenharmony_ci            val.join();
2388da853ecaSopenharmony_ci        }
2389da853ecaSopenharmony_ci
2390da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2391da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
2392da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
2393da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
2394da853ecaSopenharmony_ci            }
2395da853ecaSopenharmony_ci
2396da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
2397da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
2398da853ecaSopenharmony_ci                source_list[i] = nullptr;
2399da853ecaSopenharmony_ci            }
2400da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
2401da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
2402da853ecaSopenharmony_ci                memory_list[i] = nullptr;
2403da853ecaSopenharmony_ci            }
2404da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
2405da853ecaSopenharmony_ci
2406da853ecaSopenharmony_ci            close(g_fdList[i]);
2407da853ecaSopenharmony_ci        }
2408da853ecaSopenharmony_ci        cout << "num: " << num << endl;
2409da853ecaSopenharmony_ci    }
2410da853ecaSopenharmony_ci}
2411da853ecaSopenharmony_ci
2412da853ecaSopenharmony_ci/**
2413da853ecaSopenharmony_ci * @tc.number    : DEMUXER_RELI_9100
2414da853ecaSopenharmony_ci * @tc.name      : create 16 instances repeat create-destory with srt uri
2415da853ecaSopenharmony_ci * @tc.desc      : function test
2416da853ecaSopenharmony_ci */
2417da853ecaSopenharmony_ciHWTEST_F(DemuxerReliNdkTest, DEMUXER_RELI_9100, TestSize.Level3)
2418da853ecaSopenharmony_ci{
2419da853ecaSopenharmony_ci    int num = 0;
2420da853ecaSopenharmony_ci    while (num < 10) {
2421da853ecaSopenharmony_ci        num++;
2422da853ecaSopenharmony_ci        vector<std::thread> vecThread;
2423da853ecaSopenharmony_ci        const char *uri = "http://192.168.3.11:8080/share/srt_test.srt";
2424da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2425da853ecaSopenharmony_ci            memory_list[i] = OH_AVMemory_Create(g_width * g_height);
2426da853ecaSopenharmony_ci            cout << i << "  uri:  " << uri << endl;
2427da853ecaSopenharmony_ci            source_list[i] = OH_AVSource_CreateWithURI(const_cast<char *>(uri));
2428da853ecaSopenharmony_ci            ASSERT_NE(source_list[i], nullptr);
2429da853ecaSopenharmony_ci            demuxer_list[i] = OH_AVDemuxer_CreateWithSource(source_list[i]);
2430da853ecaSopenharmony_ci            ASSERT_NE(demuxer_list[i], nullptr);
2431da853ecaSopenharmony_ci            vecThread.emplace_back(DemuxSrtFunc, i, num);
2432da853ecaSopenharmony_ci        }
2433da853ecaSopenharmony_ci        for (auto &val : vecThread) {
2434da853ecaSopenharmony_ci            val.join();
2435da853ecaSopenharmony_ci        }
2436da853ecaSopenharmony_ci        for (int i = 0; i < g_maxThread; i++) {
2437da853ecaSopenharmony_ci            if (demuxer_list[i] != nullptr) {
2438da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_Destroy(demuxer_list[i]));
2439da853ecaSopenharmony_ci                demuxer_list[i] = nullptr;
2440da853ecaSopenharmony_ci            }
2441da853ecaSopenharmony_ci
2442da853ecaSopenharmony_ci            if (source_list[i] != nullptr) {
2443da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVSource_Destroy(source_list[i]));
2444da853ecaSopenharmony_ci                source_list[i] = nullptr;
2445da853ecaSopenharmony_ci            }
2446da853ecaSopenharmony_ci            if (memory_list[i] != nullptr) {
2447da853ecaSopenharmony_ci                ASSERT_EQ(AV_ERR_OK, OH_AVMemory_Destroy(memory_list[i]));
2448da853ecaSopenharmony_ci                memory_list[i] = nullptr;
2449da853ecaSopenharmony_ci            }
2450da853ecaSopenharmony_ci            std::cout << i << "            finish Destroy!!!!" << std::endl;
2451da853ecaSopenharmony_ci        }
2452da853ecaSopenharmony_ci        cout << "num: " << num << endl;
2453da853ecaSopenharmony_ci    }
2454da853ecaSopenharmony_ci}
2455da853ecaSopenharmony_ci
2456da853ecaSopenharmony_ci}