- 博客(35)
- 资源 (9)
- 收藏
- 关注
原创 webrtc中的transport
即底层收到数据后要触发SignalReadPacket从而调用OnReadPacket,在RtpTransport::OnReadPacket()中又会调用其虚函数OnRtpPacketReceived(),虚函数,对象,RtpTransport对象中直接能获取到P2PTransportChannel的数据,见 RtpTransport::SetRtpPacketTransport()中的信号槽连接。如果启用dtls则先建立dtls连接,建立dtls连接后收到数据也是直接抛给了RtpTransport。
2022-09-26 19:30:42
602
原创 webrtc中的p2p代码的使用
3 对端收到,判断role类型,如果冲突则与远端对比tie breaker值来判断本端应该是什么角色,谁大谁是controlling,同时controlling端要发送487响应给对端,对端根据这个来修改其role为controlled。2 发送bind request的请求里要包含ice-controlling这个属性,且属性里要有Tie breaker字段。1 一开始两端都把自己设置为controlling。结合webrtc代码我们可以单独使用其p2p模块。
2022-09-26 11:12:35
431
原创 PeerConnection中对SDP的认证过程
在PeerConnection中无论是SetLocalDescription还是SetRemoteDescription,里面的第一个都是对SDP进行认证检测即调用ValidateSessionDescription,在ValidateSessionDescription中主要对如下三个方面进行了认证:1 加密信息认证2 ice信息认证3 m-section中track个数进行认证。...
2022-08-31 14:45:16
447
原创 裁剪sdp中编解码器信息
在使用peerconnection进行rtc开发时,其默认生成的sdp信息中有比较多的H264编码器信息,这会导致sdp内容略大如何在不修改webrtc内部代码的前提下精简H264编码信息,方法很简单,我们只需定义。
2022-08-31 09:34:45
295
原创 从SDP说起
SDP的介绍可以直接看相关的文档rfc8866,里面对SDP进行了定义,并且网上也有很多优秀的文章,本文仅对一个示例进行分析,标识出个人觉得需要注意的地方。
2022-08-29 17:15:31
300
原创 webrtc中视频采集后到发送过程
VideoStreamEncoder::OnFrame |VideoStreamEncoder::MaybeEncodeVideoFrame |VideoStreamEncoder::EncodeVideoFrame | VideoSender::AddVideoFrame | VCMGenericEncoder::Encode | H264EncoderImpl::Encode | .
2022-01-20 17:33:23
2123
1
原创 webrtc中Transport-CC带宽计算流程
基于丢包RTCPReceiver::IncomingPacket |RTCPReceiver::TriggerCallbacksFromRtcpPacket |BitrateControllerImpl::OnReceivedRtcpReceiverReport |SendSideBandwidthEstimation::UpdateReceiverBlock |SendSideBandwidthEstimation::UpdatePacketsLost |SendSideBandw.
2022-01-20 17:26:24
2482
原创 ffmpeg推送fps不正确
使用ffprobe -show_streams rtmp://xxxxxxxx结果为:其中fps和tbr应该差不多,但时间确是上图结果原因:没有设置stream的avg_frame_rate方法:1av_opt_set(m_pStreamInfo.pVideoStream->priv_data, "tune", "zerolatency", 0);2pVideoStream->avg_frame_rate.num = m_pStreamInfo.sVide...
2021-10-25 15:03:59
953
原创 PeerConnectionFactory的创建(二)
MediaEngine的创建函数:文件 : media\engine\webrtcmediaengine.cc类名 : cricket::WebRtcMediaEngineFactorystatic MediaEngineInterface* Create(....);WebRtcMediaEngineFactory声明:class WebRtcMediaEngineFactory{ public: // Create a MediaEngineInterface with o
2021-08-02 10:25:38
176
原创 PeerConnectionFactory的创建(一)
名称:PeerConnectionFactory作用:创建PeerConnection及全局相关的变量文件:pc\peerconnectionfactory.cc核心成员变量及类型:std::unique_ptr<cricket::ChannelManager> channel_manager_;std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_;st
2021-07-30 14:36:40
503
原创 webrtc中音频帧时间戳的打印
采集时封装格式AudioFrame:见Channel::ProcessAndEncodeAudioOnTaskQueue()audio_input->timestamp_ = _timeStamp; //_timeStamp初始值为 0 _timeStamp += static_cast<uint32_t>(audio_input->samples_per_channel_);audio_input->timestamp_的值为采样个数的累加,以48000采样率为例
2021-04-26 14:11:38
580
原创 使用SDL_CreateWindowFrom创建支持OpenGL的SDL_Window方法
转自:https://jingyan.baidu.com/article/19192ad8e7a530e53e5707c2.html
2021-04-25 14:52:24
2284
2
原创 webrtc中视频帧时间戳的打印
封装形式:webrtc::VideoFrame时间戳:uint32_t timestamp_rtp_; rtp时间戳 默认为 0 编码前赋值int64_t ntp_time_ms_; ntp时间 默认为 0 编码前赋值int64_t timestamp_us_; 采集时系统时间 采集时赋值传输过程:VideoBroadcaster::OnFrame -> VideoStreamEncoder::OnFrame
2021-04-23 17:18:54
1023
原创 简单记录一个问题:hls m3u8 ts播放往后跳数据的问题
播放到第二个ts文件的一半的时候,ffmpeg会去拉取第四个ts文件,并且会失败,同时会清理没播放完毕的第二个文件剩余部分,然后开始播放第三个文件的开始,导致跳了很多数据帧(第二个ts剩余部分),这是由于ffmpeg-4之后添加了 http_multiple 属性导致,http_multiple : Use multiple HTTP connections for fetching segments 见hls.c即建立多个链接去拉取ts文件,解决方法:av_dict_set(&format
2021-03-09 20:53:31
1143
1
原创 mac下摄像头热拔插检测方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processAddDeviceEventWithNotification:) name:AVCaptureDeviceWasConnectedNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(processR.
2020-06-12 15:51:25
914
原创 WebRtc 音频采集到编码
本文以Windows下采集音频到发送给编码器为例,介绍了从数据采集到将数据传递给编码器这个过程的数据传递流程,同时梳理了webrtc中音频相关的channel之间的关系。在此仅以图形的方式做一个记录。1 传递流程2 AudioTransportImpl::RecordDataIsAvailable流程图3 各个channel之间关系4 BaseChann...
2019-12-10 17:00:03
1130
原创 WebRtc中定义类似传统thread的使用方式
在创建好Thread对象后,调用Start(rtc::Runnable *runnable)接口启动时,设置runnable参数:如果runnable = NULL,则线程使用自带的消息处理函数ProcessMessage,通过向线程Post消息来执行任务如果runnable 不为空,则线程使用runnable的Run()函数作为其线程函数,通过实现Runnable接口的Run()函数实现...
2019-11-28 10:37:04
743
原创 WebRtc 音频编码器
WebRtcVoiceEngine在初始化时收集了当前支持的编码器列表,其步骤如下:void WebRtcVoiceEngine::Init(){ send_codecs_ = CollectCodecs(encoder_factory_->GetSupportedEncoders());}获编码器工厂支持的编码方式encoder_factory_->GetSup...
2019-11-27 15:01:10
1124
原创 WebRtc AllocationSequeue类随笔
AllocationSequeue类成员变量:BasicPortAllocatorSession *session_;NetWork *network_;PortConfiguration *config_;UDPPort *udp_port_;AsyncPacketSocket *udp_socket_;...
2019-11-27 13:51:50
276
原创 WebRtc 让命令行程序中的主线程可以处理消息
int main(){ rtc::Thread *main_thread_(rtc::Thread::Current()); while(true) { main_thread_->ProcessMessages(100); //100ms } return 0;}
2019-11-25 14:02:49
233
原创 PeerConnectionInterface的GetStats接口的使用
一、实现了webrtc::RTCStatsCollectorCallback接口class RtcStatsObserver : virtual public webrtc::RTCStatsCollectorCallback{public: virtual void OnStatsDelivered(const rtc::scoped_refptr<const webrtc::...
2019-11-21 16:32:00
1162
1
原创 获取PeerConnection中视频发送相关的波特率和编码器帧率
注意:相关逻辑要在工作线程调用一、先获取到PeerConnection对象rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_interface_;auto peer_connection_wrapper = static_cast<webrtc::PeerConnectionProx...
2019-11-21 16:07:58
531
原创 WebRtc中如何通过PeerConnectionInterface获取到PeerConnection对象?
rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_interface_;auto peer_connection_wrapper = static_cast<webrtc::PeerConnectionProxyWithInternal<webrtc::PeerConnection...
2019-11-21 15:53:38
679
原创 webrtc中的日志相关
1、Debug模式下禁止日志输出在程序启动时 rtc::LogMessage::LogToDebug(rtc::LS_NONE);2、自定义日志接收模块1 定义rtc::LogSink子对象,实现void OnLogMessage(const std::string &message)函数class SampleLogSink:virtual public rtc::LogSin...
2019-09-23 10:54:18
1688
原创 mac app 获取不到音视频设备的原因
去Capabilities - App Sandbox 中勾选Hardwre相关选项这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图...
2019-09-10 16:09:59
1274
原创 webrtc在mac下的编译命令
1 cd到src目录2 gn gen out/mac_x64_debug --args='target_os="mac" target_cpu="x64" use_rtti=true is_debug=true is_component_build=false rtc_use_h264=true' --ide=xcode3 ninja -C out/mac_x64_debug以上命...
2019-07-30 17:04:30
1597
原创 SoundTouch 变速不变调
初始化m_soundTouch.setSampleRate(44100);m_soundTouch.setChannels(2);设置新速度m_soundTouch.setTempo(new_speed);m_soundTouch.setPitch(1.);m_soundTouch.setRate(1.);
2019-05-23 13:51:16
1104
原创 SDL_OpenAudioDevice失败的问题
SDL_GetError()返回值为:WASAPI can't initialize audio client: 尚未调用 CoInitialize。解决方法:在SDL_Init(SDL_INIT_AUDIO)之前增加CoInitialize(NULL);如果一个线程使用了com,那么要保证这个线程在使用前调用CoInitialize(NULL),且在不使用的时候调用CoUnin...
2019-05-09 11:22:15
3133
MacMetalYuv.zip
2019-09-19
usb摄像头视频采集及格式转换yuv420
2018-07-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人