Bootstrap

TRTC开发(1)

  1. 绝大数函数都在TRTCCloudDelegate这个类中,需要开发一定要使用到这个类,这个类的函数都是自动调用。
  2. OnRemoteVideoReceived这样函数是用于接收视频,注释上面写的很清楚;下面截取9.8.1.5版本的asr_coud.cc中的部分代码;
 // Note:
  // 远端单个用户的视频数据回调
  // 如果您是做视频鉴黄相关的业务,可以将这里收到的视频数据 (异步) 转发给您的
  // 视频鉴黄 后端服务
  // H264 帧
  void OnRemoteVideoReceived(const char* user_id,
                             StreamType type,
                             const VideoFrame& frame) override {
    if (verbose_) {
      LOG(INFO) << "Recevied video [" << user_id
                << "] stream_type:" << StreamTypeToString(type)
                << " frame_size:" << frame.size()
                << " frame_type:" << (frame.is_key_frame ? "I" : "P")
                << " pts:" << frame.pts;
    }
   LOG(INFO)<<"enable_h264_dump_ " << enable_h264_dump_;
   LOG(INFO)<<"enable_yuv_dump_ " << enable_yuv_dump_;
    if (enable_h264_dump_)
    {
      // EnsureH264FileCreated(user_id, 640, 368);
      EnsureYuvFileCreated(user_id, 640, 368); //先用这种方式命名和创建文件
      auto iter = yuv_dump_files_map_.find(user_id);
      if (iter != yuv_dump_files_map_.end())
      {
        File *file = yuv_dump_files_map_[user_id].get();
        std::cout << "invoke " << __FUNCTION__ << std::endl;
        file->WriteAtCurrentPos(reinterpret_cast<const char *>(frame.data()),
                                frame.size(), fp_out, fp_out_pcm);
        file->Flush();
      }
    }
  }
  1. OnRemoteAudioReceived函数用于接收音频,会保存为8k的pcm数据。单声道,16位的。使用ffplay可以播放;
C:\Users\oq_po\Downloads\windows_BaseDependencies\ffmpeg\ffplay.exe -ar 8000 -ac 1 -f s16le -i .\recorded_audio_Gbproxy-cb-007.pcm

补充一点:

ffplay -i test.pcm  -f s16le  -ac 1  -ar 8000
ffplay -i test.g711a  -f alaw  -ac 1  -ar 8000
ffplay -i test.g711u  -f mulaw  -ac 1  -ar 8000
-ac: 音频通道数
-ar:音频采样率
-f: 文件格式
来自:
https://blog.csdn.net/qq_38795209/article/details/107414626
  1. 进房流程中,如果删除下面这一部分会进房失败。
  for (auto& cloud : asr_clouds) {
    while (cloud->IsRunning()) {
      std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
  }
  1. 进房参数中有这样一个部分
    params.scene = liteav::trtc::TRTC_SCENE_RECORD;
    params.role = liteav::trtc::TRTC_ROLE_AUDIENCE;

TRTC_SCENE_RECORD:只能接收到流,不能发送流到TRTC端,
TRTC_SCENE_VIDEO_CALL:能够接收流也能发送流,但是接收流不走函数,而是走另一个函数,并且需要开另一个线程,用于接收音频数据。详见;
TRTC_ROLE_ANCHOR:能够接收和发送音视频数据;
TRTC_ROLE_AUDIENCE:只能接收流;
进房参数的设置很重要,决定了你是否能够进房,能否收到数据,能否发送数据,这一部分一定要问清楚

;