好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github:

1. 低延迟:大多数RTSP的播放都面向直播场景,如果延迟过大,严重影响体验,所以,低延迟是衡量一个好的RTSP播放器非常重要的指标,目前大牛直播SDK的RTSP直播播放延迟比开源播放器更优异(大牛直播SDK延迟在1秒左右,开源播放器如VLC,延迟相对比较大),而且长时间运行下,大牛直播SDK播放端不会造成延迟累积,开源或第三方播放器,长时间运行,容易产生延迟累积;

2. 音视频同步处理:大多播放器为了追求低延迟,甚至不做音视频同步,拿到audio video直接播放,导致a/v不同步,还有就是时间戳乱跳等各种问题,大牛直播SDK提供的播放器,具备好的时间戳同步和异常时间戳矫正机制;

备注:如果是超低延迟模式下,可以0 buffer,不做音视频同步:

3. 支持多实例:大牛直播SDK提供的RTSP直播播放SDK支持在设备性能允许的情况下,支持多实例播放RTSP流数据,大多开源播放器对多实例支持不太友好;

4. 支持buffer time设置:在一些有网络抖动的场景,播放器需要支持buffer time设置,一般来说,以毫秒计,开源播放器对此支持不够友好;

5. 实时静音:比如,多窗口播放RTSP流,如果每个audio都播放出来,体验非常不好,所以实时静音功能非常必要,开源播放器不具备实时静音功能;

6. 视频view旋转:好多摄像头由于安装限制,导致图像倒置,所以一个好的RTSP播放器应该支持如视频view实时旋转(0° 90° 180° 270°)、水平反转、垂直反转,开源或第三方播放器不具备此功能;

7. 支持解码后audio/video数据输出:大牛直播SDK接触到好多开发者,希望能在播放的同时,获取到YUV或RGB数据,进行人脸匹配等算法分析,开源播放器不具备此功能;

8. 实时快照:感兴趣或重要的画面,实时截取下来非常必要,一般播放器不具备快照能力,开源播放器不具备此功能;

9. 网络抖动处理(如断网重连):稳定的网络处理机制、支持如断网重连等,开源播放器对网络异常处理支持较差;

10. 长期运行稳定性:大牛直播SDK提供的RTSP直播播放SDK适用于长时间运行,开源播放器对长时间运行稳定性支持较差;

11. 实时下载速度反馈:大牛直播SDK提供音视频流实时下载回调,并可设置回调时间间隔,确保实时下载速度反馈,以此来监听网络状态,开源播放器不具备此能力;

12. 异常状态处理、Event状态回调:如播放的过程中断网,大牛直播SDK提供的播放器可实时回调相关状态,确保上层模块感知处理,开源播放器对此支持不好;

13. 设置视频填充模式(等比例显示):好多情况下,有些场景需要全view铺满播放,有些为了防止视频拉伸,可以设置成等比例缩放显示;

14. D3D检测:一般来说市面上的大多Windows都支持D3D,有些小众化的,只支持GDI模式绘制,所以为了更好的兼容性,这个接口非常必要;

15. 实时音量调节:实时音量调节特别是在多路播放的场景下,如大屏窗体环境下,通过更细粒度的音量调节,实现更好的播放体验;

16. 只播放关键帧:特别是大屏多实例场景播放的时候,尽管我们已经CPU占用非常低了,如果只是查看大概的监控情景,实现更多路的播放,只播放关键帧是个非常好的功能点,如果需要原始帧播放,可以实时调节即可;

17. 特定机型硬解码:特定机型硬解码,也主要是用于多路播放场景下,通过硬解码,实现更低的CPU占用目的;

18. TCP-UDP设置:考虑到部分服务器或硬件设备或网络环境对TCP、UDP某一个支持的比较好,我们加了设置接口;

19. TCP-UDP自动切换:这个是更细力度的接口,比如默认设置了TCP模式,TCP模式下收不到数据,超时后,自动切换到UDP模式尝试,一般开源播放器不具备此功能;

20. 超时时间设定:比如10-12秒收不到数据,自动重连,一般开源播放器支持不好。

总结

基于上述因素,想做好一个RTSP或者RTMP播放器,需要考虑的点实在太多了,特别是细节问题,开源的表面看省了前80%的经历,但是因为大多开源播放器系统比较庞大,适用于点播播放,却对直播播放支持很差,如果要做细粒度的控制和bug修复,剩余20%的经历,可能会耗费研发人员更大的精力,不过换句话说,对技术人员成长还是非常有利的。

RTSP播放器开发填坑之道相关推荐

  1. RTMP播放器开发填坑之道

    好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTMP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延 ...

  2. Android平台RTMP/RTSP播放器开发系列之解码和绘制

    本文主要抛砖引玉,粗略介绍下Android平台RTMP/RTSP播放器中解码和绘制相关的部分(Github). 解码 提到解码,大家都知道软硬解,甚至一些公司觉得硬解码已经足够通用,慢慢抛弃软解了,如 ...

  3. 【技术分享】Windows平台低延迟RTMP、RTSP播放器接口设计探讨

    背景 我们看过了太多介绍RTSP.RTMP播放相关的技术资料,大多接口设计简约,延迟和扩展能力也受到一定的局限,好多开发者希望我们能从接口设计的角度,大概介绍下大牛直播SDK关于RTMP.RTSP播放 ...

  4. Windows平台RTSP播放器/RTMP播放器设计需要考虑的几个点

    我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计.多绘制模式兼容.软硬解码支持.快照.RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概 ...

  5. RTSP播放器开发过程中需要考虑哪些关键因素

    好多开发者,在自研或者选择市面上的播放器的时候,除了常规的播放功能,还有很多点值得关注,如延迟.资源占用.网络异常处理.多实例支持.长时间运行稳定性等.以下是我们开发直播播放器过程中,考虑的部分关键因 ...

  6. 如何对RTSP播放器做功能和性能评估

    好多开发者在做产品竞品分析的时候,不知道如何界定一个RTSP播放器,大牛直播SDK认为,一个RTSP播放器,不是说有几个类似于Open/Close接口就够了,好的RTSP播放器需要具备以下功能和性能属 ...

  7. 如何优雅的实现一个靠谱的RTSP播放器?

    二话不说,NO 图 NO BB(以大牛直播SDK播放海康摄像机RTSP H.265流为例): 行业的浮躁,好多开发者甚至连rtsp.rtp细节不了解,依葫芦画瓢调用了ffmpeg的一些接口,就实现了个 ...

  8. 《Android FFmpeg 播放器开发梳理》第一章 播放器初始化与解复用流程

    <Android FFmpeg 播放器开发梳理>: 第零章 基础公共类的封装 播放器初始化与解复用流程 这一章,我们来讲解播放器解复用(从文件中读取数据包)的流程.在讲解播放器的读数据包流 ...

  9. Android音乐播放器开发(4)—修改密码

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

最新文章

  1. python的科学计算库有哪些_Python科学计算库-Numpy
  2. 同居1月 VS 同居1年,太真实了...
  3. SpringBoot学习:读取yml和properties文件的内容
  4. Win10+Ubuntu16.04/Ubuntu18.04双系统安装教程
  5. java不进入for_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?...
  6. phpmyadmin mysql float 长度_mysql – phpMyAdmin – “请输入有效长度”
  7. csv是python内置模块吗_Python--CSV模块 - 一只小小的寄居蟹 - 博客园
  8. java 特殊字符过滤器_java处理url中的特殊字符
  9. linux取消设置环境变量,linux设置环境变量
  10. javascript 布尔类型
  11. 配置Pylint for Python3.5
  12. MATLAB随机数生成器
  13. 单片机原理及应用c51语言版林立,单片机原理及应用——基于Proteus和Keil C(第4版)...
  14. vs2012 链接内置数据库 sql express 出现error 26 解决方法
  15. 神经网络模型怎么建立,如何选择神经网络模型
  16. PS笔记1_如何制作电子签名
  17. 【Python】只需2行代码,轻松将PDF转换成Word(含示范案例)
  18. 【设计】宽范围输入线性稳压器
  19. Pytorch - 分布式通信原语(附源码)
  20. python协程处理多个文件_python:多任务(线程、进程、协程)

热门文章

  1. python桌面开发吐血_想用java写个桌面小demo,就布局都差点写吐血了,学艺不精...
  2. 判读一个对象不为空_ArrayList实现分析(一)——对象创建
  3. 西安石油大学计算机基础考试试题,2017年西安石油大学计算机学院824计算机组成原理考研题库...
  4. Java RandomAccessFile readUTF()方法及示例
  5. 从零开始自学c语言,从零开始学习C语言
  6. android实现滑动切换图,Android:使用ViewPager实现左右滑动切换图片加点点
  7. sql服务器默认密码_搭建一个DNS服务器,轻松实现域名解析内容分发,访问速度提高N倍...
  8. rgb 灰色_金属+RGB+无线,我要买爆这款海盗船VIRTUOSO鉴赏家游戏耳机
  9. ug10许可证错误一8_面对排污许可证后监督检查,企业应做好哪些准备?
  10. Java Integer类shortValue()方法与示例