导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    请教一下各位大神,V853怎样实现连续解码多个ts文件,中间不断流?

    V Series
    1
    2
    1206
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Y
      yu741373252 LV 3 最后由 编辑

      我的想法是在demux解码完上一个文件直接加载下一个文件,刚好看到全志有AW_MPI_DEMUX_SwitchDateSource这个函数,但是我测试的AW_MPI_DEMUX_SwitchDateSource函数一直返回-1,不知道什么原因,有哪位大神使用过AW_MPI_DEMUX_SwitchDateSource,帮忙解答一下白,感恩感恩!!!
      ERRORTYPE MPPCallback(void *cookie, MPP_CHN_S pChn, MPP_EVENT_TYPE event, void pEventData)
      {
      DemuxManager::DemuxManagerContext
      pContext = (DemuxManager::DemuxManagerContext
      )cookie;

      if (pChn->mModId == MOD_ID_DEMUX)
      {
          switch (event)
          {
              case MPP_EVENT_NOTIFY_EOF:
              {
              	int ret = 0;
              	//char path[256] = {0};
                  LT_LOGD("demux to end of file");
      			if(pContext->mDmxChn >= 0)
      			{
      				memset(pContext->mConfigPara.mSrcFile,0,sizeof(pContext->mConfigPara.mSrcFile));
      				ret = pContext->pDemuxManger->GetDemuxFileFromList(pContext->mConfigPara.mSrcFile);
      				LT_LOGD("GetDemuxFileFromList ret %d %s",ret,pContext->mConfigPara.mSrcFile);
      				if(strlen(pContext->mConfigPara.mSrcFile) > 0)
      				{
      					int fd = open(pContext->mConfigPara.mSrcFile, O_RDONLY);
      				    if (fd < 0) 
      				    {
      				        LT_LOGE("Failed to open file %s(%s)", pContext->mConfigPara.mSrcFile, strerror(errno));
      				        break;
      				    }
      					if(pContext->mDmxChnAttr.mFd >= 0)
      					{
      						LT_LOGD("close fd %d",pContext->mDmxChnAttr.mFd);
      						close(pContext->mDmxChnAttr.mFd);
      					}
      					LT_LOGD("new fd %d",fd);
      					ret = AW_MPI_DEMUX_GetChnAttr(pContext->mDmxChn,&pContext->mDmxChnAttr);
      					LT_LOGD("AW_MPI_DEMUX_GetChnAttr ret %d",ret);
      					ret = AW_MPI_DEMUX_SwitchDateSource(pContext->mDmxChn,&pContext->mDmxChnAttr);
      					LT_LOGD("AW_MPI_DEMUX_SwitchDateSource ret %d",ret);
      					ret = AW_MPI_DEMUX_Start(pContext->mDmxChn);
      					LT_LOGD("AW_MPI_DEMUX_Start ert %d",ret);
      				    if(ret != SUCCESS)
      				    {
      				        LT_LOGE("fatal error! demux start fail mDmxChn %d [0x%x]!",pContext->mDmxChn, ret);
      						break;
      				    }
      					break;
      				}
      			}
      			if (pContext->mVdecChn >= 0)
                  {
                      LT_LOGD("DEMUX streamEof");
                      AW_MPI_VDEC_SetStreamEof(pContext->mVdecChn, TRUE);
                  }
                  break;
              }
              default:
              {
                  LT_LOGD("ignore demuxChn[%d] event[0x%x]", pChn->mChnId, event);
                  break;
              }
          }
      }
      

      }

      1 条回复 最后回复 回复 引用 分享 0
      • Y
        yu741373252 LV 3 最后由 编辑

        我另起一个线程,收到demux的EOF后延时一秒在AW_MPI_DEMUX_SwitchDateSource是可以的

        1 条回复 最后回复 回复 引用 分享 0
        • 1 / 1
        • First post
          Last post

        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

        行为准则 | 用户协议 | 隐私权政策