Files
2026-08-24 10:03:24 +08:00

228 lines
8.1 KiB
C++

#define LOG_TAG "AmlMpDvrPlayerTest"
#include "AmlMpTest.h"
#include <utils/AmlMpLog.h>
#include <utils/AmlMpUtils.h>
#include <gtest/gtest.h>
#include "TestUrlList.h"
#include "../amlMpTestSupporter/TestModule.h"
#include <AmlMpTestSupporter.h>
#include <DVRRecord.h>
#include <pthread.h>
#include <getopt.h>
#include "source/Source.h"
#include <Aml_MP/Aml_MP.h>
#include "string.h"
#include <stdio.h>
using namespace aml_mp;
TEST_F(AmlMpTest, DVRPlayback_SetStreams_Test)
{
std::string url;
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlayback_SetStreams_Test START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
Aml_MP_DVRPlayerStatus status;
memset(&status, 0, sizeof(Aml_MP_DVRPlayerStatus));
EXPECT_EQ(Aml_MP_DVRPlayer_GetStatus(dvrplayer, &status), AML_MP_OK);
printf("nbstreams is: %d \n", status.pids.nbStreams);
Aml_MP_DVRStreamArray streams;
memset(&streams, 0, sizeof(streams));
for (int i = 0; i < status.pids.nbStreams; ++i)
{
switch (status.pids.streams[i].type)
{
case AML_MP_STREAM_TYPE_VIDEO:
streams.streams[AML_MP_DVR_VIDEO_INDEX].type = AML_MP_STREAM_TYPE_VIDEO;
streams.streams[AML_MP_DVR_VIDEO_INDEX].codecId = status.pids.streams[i].codecId;
streams.streams[AML_MP_DVR_VIDEO_INDEX].pid = status.pids.streams[i].pid;
break;
case AML_MP_STREAM_TYPE_AUDIO:
streams.streams[AML_MP_DVR_AUDIO_INDEX].type = AML_MP_STREAM_TYPE_AUDIO;
streams.streams[AML_MP_DVR_AUDIO_INDEX].codecId = status.pids.streams[i].codecId;
streams.streams[AML_MP_DVR_AUDIO_INDEX].pid = status.pids.streams[i].pid;
break;
default:
break;
}
}
EXPECT_EQ(Aml_MP_DVRPlayer_SetStreams(dvrplayer, &streams), AML_MP_OK);
testDvrPlayer->startDVRPlaybackAfterSetStreams();
EXPECT_FALSE(waitPlaying(20* 1000ll));
testDvrPlayer->stop();
MLOGI("----------DVRPlayback_SetStreams_Test END----------\n");
}
}
TEST_F(AmlMpTest, DVRPlaybackPauseResumeTest)
{
std::string url;
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlaybackPauseResumeTest START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
waitPlaying(5 * 1000ll);
EXPECT_EQ(Aml_MP_DVRPlayer_Pause(dvrplayer), AML_MP_OK);
waitPlaying(1 * 1000ll);
//check pause
std::string frame_before = get_frame_count_checkpoint();
EXPECT_FALSE(waitPlaying(4 * 1000ll));
std::string frame_after = get_frame_count_checkpoint();
EXPECT_EQ(frame_before, frame_after);
//check resume
EXPECT_EQ(Aml_MP_DVRPlayer_Resume(dvrplayer), AML_MP_OK);
EXPECT_FALSE(waitPlayingErrors(15 * 1000ll));
testDvrPlayer->stop();
MLOGI("----------DVRPlaybackPauseResumeTest END----------\n");
}
}
TEST_F(AmlMpTest, DVRPlaybackSeekTest)
{
std::string url;
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlaybackSeekTest START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
waitPlaying(5 * 1000ll);
int timeOffset = 5 * 1000ll;
EXPECT_EQ(Aml_MP_DVRPlayer_Seek(dvrplayer, timeOffset), AML_MP_OK);
EXPECT_FALSE(waitPlayingErrors(15 * 1000ll));
testDvrPlayer->stop();
MLOGI("----------DVRPlaybackSeekTest END----------\n");
}
}
TEST_F(AmlMpTest, DVRPlaybackRate_Normal_Test)
{
std::string url;
float rate = 1.0;
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlaybackRate_Normal_Test START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
EXPECT_EQ(Aml_MP_DVRPlayer_SetPlaybackRate(dvrplayer, rate), AML_MP_OK);
EXPECT_FALSE(waitPlayingErrors(20 * 1000ll));
testDvrPlayer->stop();
MLOGI("----------DVRPlaybackRate_Normal_Test END----------\n");
}
}
TEST_F(AmlMpTest, DVRPlaybackRate_MicroSpeed_Test)
{
std::string url;
float rate[] = {0.125, 0.25, 0.5};
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlaybackRate_MicroSpeed_Test START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
for (size_t i = 0; i < sizeof(rate)/sizeof(rate[0]); i++)
{
EXPECT_EQ(Aml_MP_DVRPlayer_SetPlaybackRate(dvrplayer, rate[i]), AML_MP_OK);
EXPECT_FALSE(waitPlayingErrors(20 * 1000ll));
}
testDvrPlayer->stop();
MLOGI("----------DVRPlaybackRate_MicroSpeed_Test END----------\n");
}
}
TEST_F(AmlMpTest, DVRPlaybackRate_FastForward_Test)
{
std::string url;
float rate[] = {2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 12.0, 16.0};
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlaybackRate_FastForward_Test START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
for (size_t i = 0; i < sizeof(rate)/sizeof(rate[0]); i++)
{
EXPECT_EQ(Aml_MP_DVRPlayer_SetPlaybackRate(dvrplayer, rate[i]), AML_MP_OK);
EXPECT_FALSE(waitPlayingErrors(10 * 1000ll));
}
testDvrPlayer->stop();
MLOGI("----------DVRPlaybackRate_FastForward_Test END----------\n");
}
}
TEST_F(AmlMpTest, DVRPlaybackRate_FastBackward_Test)
{
std::string url;
float rate[] = {-1.0, -2.0, -4.0, -8.0, -12.0, -16.0, -32.0};
char recordPathInfo[100];
for (auto &url: mUrls)
{
MLOGI("----------DVRPlaybackRate_FastBackward_Test START----------\n");
DVRRecordRecordStream(url);
sptr<AmlMpTestSupporter> testDvrPlayer = nullptr;
createMpTestSupporter(&testDvrPlayer);
testDvrPlayer->setDataSource(AML_MP_RECORD_PATH);
testDvrPlayer->prepare(CryptoMode);
testDvrPlayer->startDVRPlayback();
AML_MP_DVRPLAYER dvrplayer = getDVRPlayer(testDvrPlayer);
for (size_t i = 0; i < sizeof(rate)/sizeof(rate[0]); i++)
{
EXPECT_EQ(Aml_MP_DVRPlayer_SetPlaybackRate(dvrplayer, rate[i]), AML_MP_OK);
waitPlaying(10 * 1000ll);
EXPECT_FALSE(waitPlayingErrors(10 * 1000ll));
}
testDvrPlayer->stop();
MLOGI("----------DVRPlaybackRate_FastBackward_Test END----------\n");
}
}