WEBRTC视频网络传输到解码输出
来源:互联网 发布:中控科门禁软件下载 编辑:程序博客网 时间:2024/05/17 06:03
一. 视频传输到解码
VideoCodingModuleImpl类其实并没有使用
函数调用次顺:
VideoReceiveStream::DeliverRtp->RtpStreamReceiver::DeliverRtp->RtpReceiverImpl::IncomingRtpPacket->RTPReceiverVideo::ParseRtpPacket->
RtpStreamReceiver::OnReceivedPayloadData->VideoReceiver::IncomingPacket[进入视频编解码模块]
Module/video_coding/video_coding_impl.h
VideoReceiver
1. int32_t RegisterReceiveCallback(VCMReceiveCallback*receiveCallback);
注册解码后的视频帧回调对象,通过其虚函数FrameToRender回调,在VideoStreamDecoder构造函数,注册回调对象 video_receiver_->RegisterReceiveCallback(this);
2. Video/video_stream_decoder.h
使用者对象
VideoStreamDecoder: publicVCMReceiveCallback
1. int32_t FrameToRender(VideoFrame&video_frame) override; // NOLINT
视频解码线程
VideoReceiveStream::Start->
VideoReceiveStream::DecodeThreadFunction->VideoReceiveStream::Decode->VideoReceiver::Decode(uint16_t maxWaitTimeMs)->
VideoReceiver::Decode(const VCMEncodedFrame& frame)->VideoReceiveStream::Encoded[解复用完整帧通过VideoReceiveStream构造函数中VideoReceiver的构造传入VideoReceiveStream对象作为回调]->VCMGenericDecoder::Decode(constVCMEncodedFrame& frame, int64_t nowMs)->
[VCMCodecDataBase::GetDecoder->VCMGenericDecoder::RegisterDecodeCompleteCallback->
VP9DecoderImpl::RegisterDecodeCompleteCallback注册解码后数据回调对]->
VP9DecoderImpl::Decode(const EncodedImage& input_image,
bool missing_frames,
constRTPFragmentationHeader* fragmentation,
constCodecSpecificInfo* codec_specific_info,
int64_t/*render_time_ms*/) ->DecodedImageCallback::Decoded(父)->VCMDecodedFrameCallback::Decoded(VideoFrame&decodedImage) (子)->VCMDecodedFrameCallback::Decoded(VideoFrame&decodedImage,int64_t decode_time_ms)->
VideoStreamDecoder::FrameToRender(VideoFrame&video_frame)->
[接收解码对象通过VideoStreamDecoder::VideoStreamDecoder ->VideoReceiver::RegisterReceiveCallback(this)–>VCMDecodedFrameCallback::SetUserReceiveCallback]
IncomingVideoStream::OnFrame[将帧放入队列VideoRenderFrames]->
视频显示|录像线程
VideoReceiveStream::Start->IncomingVideoStream::Start->
IncomingVideoStream::IncomingVideoStreamThreadFun[从VideoRenderFrames队列获取帧]->IncomingVideoStream::DeliverFrame->VideoReceiveStream::OnFrame[该回调函数由VideoReceiveStream::VideoReceiveStream中注册incoming_video_stream_.SetExternalCallback(this)]->WebRtcVideoReceiveStream::OnFrame(constwebrtc::VideoFrame& frame)[ WebRtcVideoReceiveStream::WebRtcVideoReceiveStream构造函数赋值config_.renderer = this]
[设置广播接收者PeerConnection::SetRemoteDescription -> PeerConnection::OnRemoteTrackSeen-> PeerConnection::CreateVideoReceiver[new VideoRtpReceiver]->VideoRtpReceiver::VideoRtpReceiver[provider_->SetVideoPlayout(ssrc_,true,&broadcaster_)]->WebRtcSession::SetVideoPlayout-> VideoChannel::SetSink->
WebRtcVideoChannel2::SetSink-> WebRtcVideoReceiveStream::SetSink(sink_)]
总结:
- 从网络接收线程输入到显示线程输出(中间解码线程)
VideoReceiveStream::DeliverRtp[已复用的视频RTP]->
VideoReceiveStream::OnFrame[已解码的视频帧]
- 从网络接收RTP到解复用完整帧
VideoReceiveStream::DeliverRtp[已复用的视频RTP]->
int32_t VideoReceiveStream::Encoded(
constEncodedImage& encoded_image,
constCodecSpecificInfo* codec_specific_info,
const RTPFragmentationHeader*fragmentation)
RtpStreamReceiver作为Video_Coding模块和RTP/RTCP 模块的中介者
#include"webrtc/video/rtp_stream_receiver.h"
RtpStreamReceiver
1. 将RTP/RTCP模块解复用的RTP包送入Video_Coding中的VideoReceiver::IncomingPacket
2. 回调RTP/RTCP中的RequestKeyFrame、SliceLossIndicationRequest、ResendPackets[关键字请求、重传帧请求]
RtpReceiver
#include"webrtc/modules/rtp_rtcp/source/rtp_receiver_impl.h"
二. 核心类关系
- WEBRTC视频网络传输到解码输出
- WEBRTC视频网络传输到解码输出
- WEBRTC 视频接收到解码
- H264编解码算法在网络视频传输中的应用
- webrtc之本地视频传输
- webrtc-android平台视频编解码分析
- WebRTC的视频传输的大致流程
- mpeg4网络视频传输
- 网络视频传输协议
- 基于iOS的网络音视频实时传输系统(五)- 使用VideoToolbox硬解码H264
- Webrtc(7) 实时视频传输中的RTCP协议
- WebRTC实时通信系列教程5 RTCPeerConnection传输视频
- 基于ffmpeg-1.1的视频解码并输出到LCD显示
- 基于ffmpeg-1.1的视频解码并输出到LCD显示
- [学习笔记]基于ffmpeg的视频解码,输出YUV图像到文件。
- rtp c++ 网络视频传输
- rtp c++ 网络视频传输
- mini2440 网络视频传输试验
- 想看TCP/IP卷一
- Java实现多线程断点下载(下载过程中可以暂停)
- 浅淡安卓json的三种解析
- leetcode(410):Split Array Largest Sum
- C 预处理器
- WEBRTC视频网络传输到解码输出
- 卷积神经网路、Mxnet、Alxnet及Lenet
- Windows exe 文件结构 版本信息
- 大神谈考研数学到底怎样复习
- RxJava简介2
- spring和springMVC父子容器的原理
- React-Native- RefreshControl && Navigator 使用案例
- 45. Jump Game II
- 有关C/C++指针的经典面试题