- 绝大数函数都在TRTCCloudDelegate这个类中,需要开发一定要使用到这个类,这个类的函数都是自动调用。
- 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();
}
}
}
- 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
- 进房流程中,如果删除下面这一部分会进房失败。
for (auto& cloud : asr_clouds) {
while (cloud->IsRunning()) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
- 进房参数中有这样一个部分
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:只能接收流;
进房参数的设置很重要,决定了你是否能够进房,能否收到数据,能否发送数据,这一部分一定要问清楚