OpusFileSave.c 4.7 KB
#include <stdio.h>
#include "JZsdkLib.h"

static int g_OpusFile_SaveLen = 0;
static FILE *g_OpusFile_SaveFp = NULL;
static int g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF;

#define OPUS_FILE_DIR "/root/sdcard/opus"
#define OPUS_TEMP_SAVE_DIR "/root/opusFileTemp.opus"
static unsigned char opus_SaveFile[128];

static int OpusFile_SaveThread_Flag = JZ_FLAGCODE_OFF;

/******************
 *  
 * 
 *  opus文件 存储显示线程
 * 
 * 
 * **********************/
static T_JZsdkReturnCode OpusFile_SaveOpusFileShowLen(void)
{
    if (OpusFile_SaveThread_Flag != JZ_FLAGCODE_OFF)
    {
        JZSDK_LOG_ERROR("存储显示线程已经启动,请先关闭");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }
    
    OpusFile_SaveThread_Flag = JZ_FLAGCODE_ON;

    

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/******************
 * 
 * 
 *  开始存储opus文件
 *  
 * 
 * **********************/
T_JZsdkReturnCode OpusFile_SaveOpusFileStart(unsigned char *FileName)
{
    g_OpusFile_SaveLen = 0;

    memset(opus_SaveFile, 0, sizeof(opus_SaveFile));
    sprintf(opus_SaveFile, "%s/%s",OPUS_FILE_DIR, FileName);

    JZSDK_LOG_INFO("上传的opus文件存储路径为:%s", opus_SaveFile);

    if (g_OpusFile_SaveFp != NULL)
    {
        JZSDK_LOG_ERROR("要保存的opus文件已经打开,请先关闭保存功能");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }
    
    g_OpusFile_SaveFp = fopen(OPUS_TEMP_SAVE_DIR, "wb");
    if (g_OpusFile_SaveFp == NULL)
    {
        JZSDK_LOG_ERROR("打开opus文件失败");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    g_OpusFile_SaveFlag = JZ_FLAGCODE_ON;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/******************
 *      
 *  
 *  存储opus流中
 * 
 * 
 * **********************/
T_JZsdkReturnCode OpusFile_SaveOpusFileStream(unsigned char *Stream, int StreamLen)
{
    if (g_OpusFile_SaveFlag == JZ_FLAGCODE_OFF)
    {
        JZSDK_LOG_ERROR("没有打开opus文件保存功能");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    if (g_OpusFile_SaveFp == NULL)
    {
        JZSDK_LOG_ERROR("要保存的opus文件未打开");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    fseek(g_OpusFile_SaveFp, g_OpusFile_SaveLen, SEEK_SET);
    int writeLen = fwrite(Stream, 1, StreamLen, g_OpusFile_SaveFp);
    if (writeLen != StreamLen)
    {
        JZSDK_LOG_ERROR("opus文件写入失败");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    fflush(g_OpusFile_SaveFp);
    g_OpusFile_SaveLen += StreamLen;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/******************
 *  
 *  
 *  结束存储opus文件
 * 
 * 
 * **********************/
T_JZsdkReturnCode OpusFile_SaveOpusFileEnd(int CheckFlag, unsigned char *CheckCode)
{
    T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
    unsigned char cmd[128];

    //标志位判定
    if (g_OpusFile_SaveFlag == JZ_FLAGCODE_OFF)
    {
        JZSDK_LOG_ERROR("没有打开opus文件保存功能");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    //文件指针判定
    if (g_OpusFile_SaveFp == NULL)
    {
        JZSDK_LOG_ERROR("要保存的opus文件未打开");
        g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF;
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    //关闭存储的文件
    fflush(g_OpusFile_SaveFp);
    fclose(g_OpusFile_SaveFp);
    g_OpusFile_SaveFp = NULL;
    
    JZSDK_LOG_INFO("已存储opus文件, 其长度为:%d", g_OpusFile_SaveLen);

    switch (CheckFlag)
    {
        case JZ_FLAGCODE_OFF:
        {
            JZSDK_LOG_INFO("opus保存无需校验码");
            ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
        }
        break;

        case JZSDK_CHECK_SUM_TYPE_MD5:
        {
            JZSDK_LOG_INFO("opus保存使用md5校验码");
            //1、获取文件的md5校验码
			ret = JZsdk_CheckSum(JZSDK_CHECK_SUM_TYPE_MD5, OPUS_TEMP_SAVE_DIR, CheckCode, 32);
        }
        break;

        case JZSDK_CHECK_SUM_TYPE_SRC32:
        {
            JZSDK_LOG_INFO("opus保存使用src32校验码");
            //1、获取文件的src32校验码
			ret = JZsdk_CheckSum(JZSDK_CHECK_SUM_TYPE_SRC32, OPUS_TEMP_SAVE_DIR, CheckCode, 4);
        }
        
        default:
        {
            JZSDK_LOG_ERROR("opus保存校验码类型错误");
            ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }
        break;
    }

    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("opus保存校验失败");
        memset(cmd, 0, sizeof(cmd));
        sprintf(cmd, "rm -rf %s", OPUS_TEMP_SAVE_DIR);
        JZsdk_RunSystemCmd(cmd);  
		g_OpusFile_SaveFlag = JZ_FLAGCODE_OFF;

        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    
}