精华内容
下载资源
问答
  • webrtc视频卡顿分析一本地视频卡顿

    千次阅读 2019-05-31 18:34:02
    视频卡顿几个原因 1、网络抖动,丢包 2、发布端因设置码率不够丢帧或因cpu处理不及时丢帧 3、显卡渲染能力不足 4、逻辑有问题导致渲染间隔不均匀 最近在处理高帧率,高分辨率时遇到视频帧卡顿,抖动问题,记录处理...

    视频卡顿几个原因

    1、网络抖动,丢包

    2、发布端因设置码率不够丢帧或因cpu处理不及时丢帧

    3、显卡渲染能力不足

    4、逻辑有问题导致渲染间隔不均匀

    最近在处理高帧率,高分辨率时遇到视频帧卡顿,抖动问题,记录处理过程,下面分析几个可能出现卡顿的流程

    一、本地视频卡顿排查

    1、本地采集伪代码

    CaptureSinkFilter::ProcessCapturedFrame  //循环执行采集                                               //
    {
           VideoCaptureImpl::IncomingFrame //分辨率格式安全检查  ,缩放    
           {
                   ConvertToI420 //格式转换
                   CropAndScaleFrom // 如果不是目标分辨率 缩放
                   VideoCaptureImpl::DeliverCapturedFrame//传递
                   {
                           _dataCallBack->OnIncomingCapturedFrame//传递到自定义的capture接收接口
                           {
    							OnIncomingCapturedFrame//自定义的采集接收接口
                               {
                                      sink_->OnFrame//编码器接收接口
                                      {
                                         	ViEEncoder::OnFrame //编码器接收到采集的视频帧,放入任务队列
                                         	{
                                         			incoming_frame.set_render_time_ms //设置采集时间
                                         			incoming_frame.set_ntp_time_ms //设置ntp ,rtcp sr用
                                         			incoming_frame.set_timestamp //设置时间戳,rtp用
                                         			encoder_queue_.PostTask //放入编码队列
                                         	}
                                       }
                                }
                          }
                   }
           }
    }
    

    这个过程除了格式错误,没有地方进行丢帧处理

    2、本地调用渲染伪代码

    前面采集的帧已经放入队列,后面编码线程从队列中取出数据,在取数据的时候有丢帧处理

    TaskQueue::ProcessQueuedMessages //循环执行任务
    {
    	ViEEncoder::EncodeTask::Run()  //执行编码 本地显示
    	{
    		if (--vie_encoder_->posted_frames_waiting_for_encode_ == 0) //如果任务队列只有一帧,则执行编码,超过一帧的就丢弃
    		{
    			 vie_encoder_->EncodeVideoFrame //执行编码
    			 {
    			 	pre_encode_callback_->OnFrame  //本地渲染
    			    {
    			    	RTCD3dRenderer::OnFrame //执行渲染
    			    }
    			 	EncoderPaused() //判断是否丢帧
    			 }
    		}
    		else
    		{
    			++vie_encoder_->dropped_frame_count_ //丢弃,当cpu能力不足,造成队列堆积会丢帧处理
    		}
    	}
    }
    

    由此看来本地视频卡顿,可能有以下几个原因
    1、cpu处理不及时,造成队列堆积,丢弃
    2、渲染和编码一个线程,会不会存在因编码造成的渲染间隔不均匀?
    3、显卡渲染有问题,渲染展现出的卡顿
    4、摄像头采集到的就是不均匀的

    3、具体原因分析

    配置:cpu: amd R5-2400G 集显,相当于gtx1030
    摄像头:1080p60 usb3.0
    现象:本地渲染出现卡顿

    步骤1、怀疑是cpu处理不及时,丢帧,或者编码慢,导致渲染不均匀,先把编码逻辑去掉,只做渲染

    void ViEEncoder::EncodeVideoFrame(const VideoFrame& video_frame,
                                      int64_t time_when_posted_in_ms) 
    {
      RTC_DCHECK_RUN_ON(&encoder_queue_);
      if (pre_encode_callback_)
      {
    	  pre_encode_callback_->OnFrame(video_frame);
      }
      return; //在此直接返回,不做编码处理,只渲染
    }
    

    测试发现,依然卡顿,尤其是在背景是高亮的情况下

    步骤2、确认不是cpu造成的,日志打印渲染,查看渲染时间

    n:1559288807289 c:1226 du:12 ---------------------------
    n:1559288807303 c:1240 du:14 ---------------------------
    n:1559288807320 c:1644 du:17
    n:1559288807337 c:1578 du:17
    n:1559288807352 c:1413 du:15
    n:1559288807371 c:1595 du:19 ---------------------------
    n:1559288807386 c:1609 du:15
    n:1559288807405 c:1906 du:19 ---------------------------
    n:1559288807419 c:1233 du:14 ---------------------------
    n:1559288807437 c:1720 du:18 ---------------------------
    n:1559288807453 c:1348 du:16
    n:1559288807471 c:1716 du:18 ---------------------------
    n:1559288807489 c:1614 du:18 ---------------------------
    n:1559288807503 c:1226 du:14 ---------------------------
    n:1559288807521 c:1667 du:18 ---------------------------
    n:1559288807537 c:1330 du:16
    n:1559288807554 c:1582 du:17
    n:1559288807572 c:1633 du:18 ---------------------------
    n:1559288807586 c:1210 du:14 ---------------------------
    n:1559288807603 c:1612 du:17
    n:1559288807622 c:1795 du:19 ---------------------------
    n:1559288807636 c:1518 du:14 ---------------------------
    n:1559288807653 c:1749 du:17
    n:1559288807671 c:1704 du:18 ---------------------------
    

    可以看到帧率不稳定,间隔时间应该是16,17ms,但在明暗变化的时候,进一步确认是摄像头硬件问题 还是 逻辑问题
    步骤3、在最接近摄像头采集出来的地方,日志打印

    int32_t VideoCaptureImpl::IncomingFrame(
        uint8_t* videoFrame,
        size_t videoFrameLength,
        const VideoCaptureCapability& frameInfo,
        int64_t captureTime/*=0*/)
    //在这个函数直接打印日志, 返回
    
    1559289895617 capture time:2430 cost 17 
    1559289895634 capture time:2447 cost 17 
    1559289895650 capture time:2463 cost 16 
    1559289895667 capture time:2480 cost 17 
    1559289895684 capture time:2497 cost 17 
    1559289895700 capture time:2513 cost 16 
    1559289895717 capture time:2530 cost 17 
    1559289895817 capture time:2630 cost 100  error 2433--------------
    1559289895834 capture time:2647 cost 17 
    1559289895851 capture time:2664 cost 17 
    1559289895867 capture time:2680 cost 16 
    1559289895884 capture time:2697 cost 17 
    1559289895901 capture time:2714 cost 17 
    1559289895917 capture time:2730 cost 16 
    1559289895934 capture time:2747 cost 17 
    1559289895951 capture time:2764 cost 17 
    1559289895967 capture time:2780 cost 16 
    1559289895984 capture time:2797 cost 17 
    1559289896001 capture time:2814 cost 17 
    1559289896017 capture time:2830 cost 16 
    1559289896034 capture time:2847 cost 17 
    1559289896051 capture time:2864 cost 17 
    1559289896067 capture time:2880 cost 16 
    

    总体来说比较均匀,偶尔一次比较大,可能是因为摄像头硬件问题,或者usb传输导致,暂且放过

    原因在哪呢

    怀疑是这个转换,有的摄像头采集出来的不是yuv420,需要做转换,这个转换需要时间

    VideoCaptureImpl::IncomingFrame
    {
    	ConvertToI420  //转换
    	VideoFrame captureFrame(buffer, 0, rtc::TimeMillis(), !apply_rotation ? _rotateFrame : kVideoRotation_0);//在此设置的capture 时间,是有问题的
    }
    

    正常情况下先转格式,再赋值时间没什么影响,但是在大分辨率先转换,再赋值,可能会有几ms的差异,会出现卡顿,稍后验证一下。我先写个渲染,加个平滑机制试试

    展开全文
  • 这里提供了音视频测试相关的资料,帮忙软件测试工程师更深入的了解如何进行音视频测试、如何排查音视频卡顿问题、如何压测流媒体转发能力
  • <div><pre> // src/ImageData.js isBuffered(time) { return time >= this.start && time <...最后结果是视频卡顿,是因为最后几帧丢失了吗?请问怎么解决,谢谢~ ...
  • 解决kurento视频卡顿问题 kurento是目前主流的webrtc开源框架之一,有不少的企业都拿kurento来做产品。当把kurento的demo搭起来后发现画质并不是很理想,而且局域网环境(没有限制带宽)下也是如此。本文章就是解决...

    解决kurento视频卡顿问题

    kurento是目前主流的webrtc开源框架之一,有不少的企业都拿kurento来做产品。当把kurento的demo搭起来后发现画质并不是很理想,而且局域网环境(没有限制带宽)下也是如此。本文章就是解决这些问题的!!!

    前提条件

    搭完之后是能运行的只是觉得通讯画质比较差,如果本来都没有运行的有什么端口被墙等等各种问题的,我们就无法聊下去了本文章不是说搭建的。网络带宽没有限制,比如你租了1Mbps带宽的云服务器来跑还有想好的画质就是癞蛤蟆想吃天鹅肉,720P(100万像素)的一路视频大概就2Mbps了。

    修改前端的video大小

    修改用户界面的限制
    本来列子是kurento-tutorial-java\kurento-group-call项目所以修改文件
    kurento-tutorial-java\kurento-group-call\src\main\resources\static\js\conferenceroom.js

    function onExistingParticipants(msg) {
    	var constraints = {
    		audio : true,
    		video : {
    			mandatory : {
    				maxWidth : 320, /*改成分辨率,比如720*/
    				maxFrameRate : 15,/*改成想要的大帧率,比如30*/
    				minFrameRate : 15/*改成想要的小帧率,比如24*/
    			}
    		}
    	};
    

    修改WebRtcEndpoint带宽限制

    修改kurento接口的限制
    本来列子是kurento-tutorial-java\kurento-group-call项目所以修改文件
    tutorial-java\kurento-group-call\src\main\java\org\kurento\tutorial\groupcall\UserSession.java
    所有WebRtcEndpoint 创建时就设置好带宽限制

            this.outgoingMedia = new WebRtcEndpoint.Builder(pipeline).build();
            this.outgoingMedia.setMaxVideoRecvBandwidth(2000);
            this.outgoingMedia.setMinVideoRecvBandwidth(1000);
            this.outgoingMedia.setMaxVideoSendBandwidth(2000);
            this.outgoingMedia.setMinVideoSendBandwidth(1000);
    

    ** [*]输入带宽控制机制: **Kurento WebRTC允许配置接收比特率的范围。最大值在SDP中公布,而min值设置为限制REMB包的较低值。因此,min值将只有效果.

    setMin/MaxVideoRecvBandwidth:设置接收视频流预期的最大/最大比特率限制。
    setMin/MaxAudioRecvBandwidth:设置接收音频流预期的最大/最大比特率限制。
    setMin/MaxVideoSendBandwidth:设置发送到远程对等体的视频的最小/最大比特率限制。
    setMin/MaxAudioSendBandwidth:设置发送到远程对等体的音频的最小/最大比特率限制。
    

    默认视频比特率范围在100kbps和500kbps之间。

    修改ubuntu的UDP缓存

    修改ubuntu系统的限制
    修改/etc/sysctl.conf 在后面加上

    
    
    fs.file-max=655350 
    
    net.core.wmem_default = 8388608 
    net.core.rmem_default = 8388608 
    net.core.wmem_max = 20971520 
    net.core.rmem_max = 8388608 
    net.ipv4.tcp_mem = 1162629 1550174 2325258 
    net.ipv4.tcp_wmem = 4096 16384 4194304 
    net.ipv4.tcp_rmem = 4096 87380 6291456  
    

    配置完以上几点你的kurento顺畅无阻了!!!祝你生活愉快!!!

    展开全文
  • 转发视频卡顿

    2021-01-11 13:22:03
    <div><p>用darwin做转发服务器,...vlc接收端卡顿,vlc日志显示picture is too late to displayed,貌似服务器时间戳处理有问题</p><p>该提问来源于开源项目:EasyDarwin/EasyDarwin</p></div>
  • 音视频在现在的社会中无处不在,视频直播已经成为大家生活或娱乐的必需品了,那么音视频卡顿给我们的体验会造成影响,那么造成音视频卡顿的原因都有哪些昵? 一、设备原因 此处设备主要是指用户端的软硬件配置。...

            音视频在现在的社会中无处不在,视频直播已经成为大家生活或娱乐的必需品了,那么音视频卡顿给我们的体验会造成影响,那么造成音视频卡顿的原因都有哪些昵?

    一、设备原因

           此处设备主要是指用户端的软硬件配置。在直播的传输过程中,会对视频进行编解码,高清视频往往会给硬件带来解码压力,由于解码造成的卡顿尤为明显。如果手机/电脑硬件配置低,或播放软件版本过低 ,编解码的速度就会降低,就可能造成视频播放卡顿的情况。

    解决方案

    (1).提高直播软件的兼容性和容错率,升级硬件和软件设备,或设置多种清晰度供用户自行调整;

    (2).使用硬编硬解方案,充分利用GPU 加速,降低视频码率,选择流畅或者标清画质进行视频播放;

    (3).增大播放器缓冲区,缓解因网络或解码不稳定引起的卡顿。

    二、视频源本身的数据丢失

            有些视频,在使用播发器播放的时候,会出现一卡一卡的问题,那么可以多试几个播发器,如果都卡顿,那么就是视频源问题。

    解决方案:

    (1).增加视频源的录制标准; 

    (2).减少视频源录制干扰;

    三、视频流

           音视频时间戳不同步,在直播中,音视频流在进行编码后会有固定的时间戳,经网络传输到达用户端后,视频帧会按照时间戳排序成像,如果时间戳不同步,会影响画面渲染,导致画面解析时出现错乱,前后画面衔接会出现不连续甚至花屏的现象。

    解决方案:

            我们可对推流器的源码进行研究,把读取到的每一帧音频、视频的时间戳进行查阅、分析,然后通过程序干涉推流器或者流媒体服务器,矫正逻辑值,使音画同步。

          视频流参数配置问题:

           根据人眼的视觉暂留原理,美妙的画面张数必须达到一定的数值,人眼的观看才是连续有效地。如果视频的帧率(帧率即美妙的画面张数)设置过低,或视频流的编码方式与传输服务器有不兼容的情况,部分音视频数据出现了解析错误甚至无法解析的情况,也会出现视频流播放卡顿的问题。

    解决方案:

    (1).设置合理的码率,帧率,分辨率,关键帧间隔,音视频编码格式等参数;

    (2).尽量遵循标准的视频编码方案,流媒体传输协议,对视频流进行采集,编码,播放等操作。

    四、网络环境

           如果主播端网络环境较差时,会导致推流端上行不稳定,如果是观众播放端的网络存在波动问题,需要定位一下是大面积的观众卡顿还是局部观众卡顿。

    解决方案:

    (1).使用 speedtest 进行测速,判断终端的网络速度;

    (2).用户 ping 播放域名,查看解析到的服务器节点,判断自身IP 到服务器之间是否有延迟过大或者丢包的情况出现。

    五、服务器

           现在很多直播平台大多选择CDN厂商进行直播底层业务支撑,当直播观看人数并发较大时,就会给服务器负载造成压力,带宽数据量大,传输缓慢,就会导致卡顿。

    解决方案

          联系 CDN 厂商进行线路排查,选择更适合的服务线路;也可以通过播放器打点上报,统计所有客户端的整体卡顿率情况,分地区做一些线路和资源的调整和优化。

     

     

     

     

     

     

     

     

     

     

    展开全文
  • obs vlc源视频卡顿When watching a video that’s streaming across your home network, it’s annoying to get the “stutter effect”. With a simple tweak in VLC and Windows Media Player we can help prevent...
    obs vlc源视频卡顿

    obs vlc源视频卡顿

    When watching a video that’s streaming across your home network, it’s annoying to get the “stutter effect”. With a simple tweak in VLC and Windows Media Player we can help prevent this annoyance.

    观看通过家庭网络流式传输的视频时,令人讨厌的是“结结巴巴的效果”。 通过VLC和Windows Media Player中的简单调整,我们可以帮助避免这种烦恼。

    There could be other factors that cause network video streams to stutter, such as the type of hardware you’re using or streaming wirelessly. But before you go out and spend a bunch of money for a full Gigabit network, a simple setting change to the read buffer cache in VLC or WMP can definitely help.

    可能还有其他因素导致网络视频流变得混乱,例如您使用的硬件类型或无线流式传输。 但是在您出去花费大量金钱建立一个完整的千兆网络之前,对VLC或WMP中的读取缓冲区高速缓存进行简单的设置更改肯定会有所帮助。

    Increase Caching in VLC

    增加VLC中的缓存

    To change the buffer cache size in VLC click on Media \ Open Network Stream.

    要在VLC中更改缓冲区缓存大小,请单击“媒体” \“打开网络流”。

    sshot-2010-07-21-[23-51-33]

    At the bottom right of the screen, check Show extended options.

    在屏幕的右下角,选中显示扩展选项

    sshot-2010-07-21-[23-53-12]

    Now increase the number in the Caching field. By default ours was set to 200ms and we bumped it up to 500ms or 0.5 seconds. When done click the Play button.

    现在,在“缓存”字段中增加数量。 默认情况下,我们将其设置为200ms,然后将其提高到500ms或0.5秒。 完成后,单击“播放”按钮。

    sshot-2010-07-21-[23-54-58]

    Now you should be able to enjoy your video stutter free.

    现在,您应该可以免费享受视频停顿了。

    sshot-2010-07-22-[00-04-52]

    Windows Media Player

    Windows媒体播放器

    To increase the read buffer in Windows 7 Media Player open it up and click “Alt+T” to bring up the menu and go to Tools and click on Options.

    要增加Windows 7 Media Player中的读取缓冲区,请打开它,然后单击“ Alt + T”以显示菜单,然后转到“工具”,然后单击“选项”。

    sshot-2010-07-22-[00-09-58]

    Now click on the Performance tab and under Network buffering change the buffering from using the default (which is 5 seconds) to a larger number. Notice in WMP it’s not in milliseconds like VLC so just increase it to whatever works best. When you’re done click OK.

    现在,单击“性能”选项卡,然后在“网络缓冲”下将缓冲从使用默认值(5秒)更改为更大的数量。 请注意,在WMP中,它不像VLC那样毫秒,因此只要将其增大到最佳效果即可。 完成后,单击“确定”。

    sshot-2010-07-22-[00-12-50]

    Now you should be able to watch your favorite streaming video content on Media Player without any stuttering in the feed.

    现在,您应该可以在Media Player上观看自己喜欢的流视频内容,而不会在Feed中出现任何卡顿现象。

    sshot-2010-07-22-[00-14-18]

    Windows Media Player 11

    Windows Media Player 11

    You can also do this in WMP 11 in XP and Vista following the same process…

    您也可以在XP和Vista中的WMP 11中按照相同的过程执行此操作…

    sshot-2010-07-22-[00-46-38]
    sshot-2010-07-22-[00-48-25]

    Conclusion

    结论

    If you’re annoyed by stuttering when streaming video over your network, changing these settings can help. You’ll probably have to experiment a bit with the caching until you get it where you want it. You should be able to do this in other video players as well, just read the products documentation. Depending on how much you increase it by, it may take videos longer to startup, but you should be able to enjoy stutter free video!

    如果您在网络上流式传输视频时感到口吃而烦恼,则更改这些设置会有所帮助。 您可能必须对缓存进行一些实验,直到将其获得所需的位置为止。 您也应该可以在其他视频播放器中执行此操作,只需阅读产品文档即可。 根据增加的程度,视频可能需要更长的时间才能启动,但是您应该可以享受口吃的免费视频!

    翻译自: https://www.howtogeek.com/howto/22757/help-prevent-stutter-in-video-streams-in-vlc-windows-media-player/

    obs vlc源视频卡顿

    展开全文
  • 伴随全国各级各类学校延期开学、教育部发出“停课...如何解决服务器过载崩溃、视频卡顿等问题,满足流量激增情况下,线上授课的流畅度、稳定度、清晰度等硬性指标,是在线教育行业必须快速攻克的技术难关。 疫情期间
  • PJSIP视频卡顿的原因以及解决办法

    千次阅读 2019-03-19 11:54:06
    PJSIP视频卡顿的原因以及解决办法 现象:网络状况很好,没有丢包,视频也不会花屏,但是不流畅卡顿很厉害,这个时候作为用户是崩溃的。 分析:花屏和卡顿两个现象是不一样的原因造成。 1、花屏是解码宏块出现...
  • 使用ijkplayer播放4k视频卡顿的解决方法,使用硬解码 ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);  
  • #Unity 视频编码器问题解决方案(视频卡顿,花屏,黑屏) 1、用“格式工厂”从新输出“H264”格式 or 其他 MP4解码器格式 2、Win7系统,安装 Win7Codecsx64_v11.3.4 or windows_media_player_12_beta_1 尝试 3、安装...
  • 播放此视频卡顿

    2020-12-25 23:25:09
    <div><p>https://ks3-cn-beijing.ksyun.com/kaipaila/movie01.mp4</p><p>该提问来源于开源项目:ksvc/KSYMediaPlayer_iOS</p></div>
  • 直播视频卡顿

    2017-04-18 09:13:00
    观看自己开播的直播间,经常出现卡顿,而且画面一卡6,7s,重新播放时会出现跳帧,卡顿频率也较高,导致该App可用性极低。 二. 分析 1. 直播架构分析 根据log与抓包分析,其使用协议与后端架构如下: 直播...
  • ​问题背景: 前两天看读者留言让再写写音视频问题排查方面的思路,前面大概写几篇:《音...近期上线后,发现视频整体播放没有啥大问题,但是仔细看还是感觉有点卡顿,不仔细看不容易发现,就这个视频卡顿问题进行了
  • 关于deepin linux15.6-15.9.1系统播放视频卡顿解决办法 chrome浏览器 关闭chrome硬件加速模式 设置>高级>使用硬件加速模式 注释:由于视频卡顿是因显卡驱动问题,建议如果是其他浏览器也关闭硬件加速模式。 ...
  • 除了视频直播外,视频回放也不可避免的面临着这样的问题,国标EasyGBS也有回放设备端历史视频卡顿的问题,下面是我们的排查过程。 1、一开始我们以为是服务器带宽不够,但是后来检查带宽发现,阿里云服务器给的是...
  • 奇技 · 指南在视频质量检测中,检测视频是否卡顿也属于视频质量检测的标准之一,在构建视频检测平台中,这一步至关重要。本文要说明的是把视频转换为帧序列,根据计算帧之间的差值,寻找帧序列中是否...
  • ,在切换下一个视频时,UI线程会卡顿,播放时间越长卡的时间越长。只是为什么? 怎么解决
  • 全屏时,看视频卡顿 闪跳 解决方法:关闭Chrome浏览器的硬件加速 设置>高级>系统
  • 笔记本(独显)显示器采集黑屏 设置 --> 系统 -->...录制视频卡顿问题 一般是由于内存不足导致的 编码器选择 设置 --> 输出 --> 录像 --> 编码器选择: 两个 264 都可以选择 ...
  • webrtc视频卡顿分析-接收端视频渲染

    千次阅读 2019-06-14 14:46:51
    卡顿最主要的原因还是网络抖动,nack,fec,码率调整,帧率调整,分辨率调整等,这些放到后面分析,先把采集,编码,渲染流程看一下 1.接收端视频渲染流程调用堆栈伪代码 incoming_video_stream.cc 入口,单独的线程...
  • UE4播放视频卡顿

    2020-04-21 14:27:43
    项目需求需要同时播放10个左右的视频,造成帧率瞬间下降 在官网找到的解决方法
  • 微信小程序播放视频卡顿问题

    千次阅读 2019-09-19 03:24:01
    微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,加一个custom-cache=”{{false}}“即可解决,这个属性文档上没有,是从小程序开发社区中get到的。 <video src="{{url}}" id=...
  • 微信小程序中使用video组件播放m3u8直播视频,在ios的真机预览里点击video中间的播放容易卡几十秒,此时什么都做不了,手机也非常非常卡。 我的解决办法是在视频video组件里加入custom-cache={{false}} autoplay=...
  • 在自己的机器上视频音频都正常。 现场的话,全屏的时候视频会变慢,音频的速度正常。小窗口情况都正常。 硬件配置应该还可以。 问题会是出在哪里。。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,880
精华内容 752
关键字:

视频卡顿