关于视频流控制的方式,有了解的兄弟来指导下

雾雨峰 2014-02-18 09:23:05
RT,
兄弟做视频平台的服务器端,主要是为前台的客户端提供相关的数据信息。
数据获取是通过相关协议从第三方设备中获取,现在遇到一个问题:

当获取视频流时,第三方会把某一段时间内的视频流不计速度的发送过来,而非我观看的速度。且并不一定是按照固定的帧率发送,且不是一包一帧或者几包一帧的固定速率。

请问在不解码的前提下,我作为服务器怎么能够将视频数据有控制的给前台客户端,又或者有无其他的方式。

第三方修改基本不考虑了!人家不考虑这个问题。只能从自己的平台着手。

各位兄弟姐妹们给点意见,谢谢!!
...全文
156 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
96掌门师兄 2014-02-18
  • 打赏
  • 举报
回复
引用 3 楼 safeili 的回复:
[quote=引用 1 楼 turingo 的回复:] 开辟足够的缓冲区即可,第三方发送过来的数据,你只需要简单的先放在缓冲区即可,而你观看的数据从缓冲区取,而不是直接从第三方取就行了。 [quote=引用 楼主 safeili 的回复:] RT, 兄弟做视频平台的服务器端,主要是为前台的客户端提供相关的数据信息。 数据获取是通过相关协议从第三方设备中获取,现在遇到一个问题: 当获取视频流时,第三方会把某一段时间内的视频流不计速度的发送过来,而非我观看的速度。且并不一定是按照固定的帧率发送,且不是一包一帧或者几包一帧的固定速率。 请问在不解码的前提下,我作为服务器怎么能够将视频数据有控制的给前台客户端,又或者有无其他的方式。 第三方修改基本不考虑了!人家不考虑这个问题。只能从自己的平台着手。 各位兄弟姐妹们给点意见,谢谢!!
[/quote] 缓存...这样还要建立在我自己解码的基础上,不然怎么根据每秒的帧率来发送数据!何况到底是几包一帧也不清楚,也就是说是变化的!不确定。[/quote] 是用RTP/RTCP协议发送的吧,帧头就应该有时间戳。我只做过TCP协议传顺序帧,也不是很了解RTP,最近打算学习下。求楼下高手
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
引用 2 楼 ouyh12345 的回复:
帧控制信息是在流里面的 帧率是在协议头,解码后,每个帧都有时间戳
我就是想避免解码! 我自己解码在编码发送的话肯定是可以解决这个问题的 但是我是服务器,不止处理某一个视频的信息,最低的时候也有10几路几十路 我自己做编解码,那么我还当啥服务器啊。。。还有啥性能!。。。。 不过仍谢谢!!!!!
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
开辟足够的缓冲区即可,第三方发送过来的数据,你只需要简单的先放在缓冲区即可,而你观看的数据从缓冲区取,而不是直接从第三方取就行了。 [quote=引用 楼主 safeili 的回复:] RT, 兄弟做视频平台的服务器端,主要是为前台的客户端提供相关的数据信息。 数据获取是通过相关协议从第三方设备中获取,现在遇到一个问题: 当获取视频流时,第三方会把某一段时间内的视频流不计速度的发送过来,而非我观看的速度。且并不一定是按照固定的帧率发送,且不是一包一帧或者几包一帧的固定速率。 请问在不解码的前提下,我作为服务器怎么能够将视频数据有控制的给前台客户端,又或者有无其他的方式。 第三方修改基本不考虑了!人家不考虑这个问题。只能从自己的平台着手。 各位兄弟姐妹们给点意见,谢谢!!
[/quote] 缓存...这样还要建立在我自己解码的基础上,不然怎么根据每秒的帧率来发送数据!何况到底是几包一帧也不清楚,也就是说是变化的!不确定。
ouyh12345 2014-02-18
  • 打赏
  • 举报
回复
帧控制信息是在流里面的 帧率是在协议头,解码后,每个帧都有时间戳
图灵狗 2014-02-18
  • 打赏
  • 举报
回复
开辟足够的缓冲区即可,第三方发送过来的数据,你只需要简单的先放在缓冲区即可,而你观看的数据从缓冲区取,而不是直接从第三方取就行了。
引用 楼主 safeili 的回复:
RT, 兄弟做视频平台的服务器端,主要是为前台的客户端提供相关的数据信息。 数据获取是通过相关协议从第三方设备中获取,现在遇到一个问题: 当获取视频流时,第三方会把某一段时间内的视频流不计速度的发送过来,而非我观看的速度。且并不一定是按照固定的帧率发送,且不是一包一帧或者几包一帧的固定速率。 请问在不解码的前提下,我作为服务器怎么能够将视频数据有控制的给前台客户端,又或者有无其他的方式。 第三方修改基本不考虑了!人家不考虑这个问题。只能从自己的平台着手。 各位兄弟姐妹们给点意见,谢谢!!
sniffer12345 2014-02-18
  • 打赏
  • 举报
回复
引用 12 楼 safeili 的回复:
[quote=引用 10 楼 sniffer12345 的回复:] 无论服务器是否控制,你都应该做本地文件缓存。 你要做两级缓存,一级是文件的,一级是内存的,收发都一样。cache管理的话一方面LRU,一方面就是给个阀值,然后用户可以清空。大家通用的做法,楼主不用纠结了。
文件级的缓存是没有必要的,只会造成响应缓慢,带宽占用超高![/quote] 虽然你结贴了,但是我还是想说,文件的缓存你一定要加上。。视频流的数据是巨大的,内存肯定顶不住。顶多你配置的内存缓存可以大一些,但你必须要考虑到极端的情况,甚至可以说这根本不极端,而是很大可能发生的事。服务器就是为了求稳,稳定后再考虑性能。
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
OK,谢谢大家的启发!小弟已经有相关的方式了!谢谢,谢谢大家!!! 结贴!!
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
引用 10 楼 sniffer12345 的回复:
无论服务器是否控制,你都应该做本地文件缓存。 你要做两级缓存,一级是文件的,一级是内存的,收发都一样。cache管理的话一方面LRU,一方面就是给个阀值,然后用户可以清空。大家通用的做法,楼主不用纠结了。
文件级的缓存是没有必要的,只会造成响应缓慢,带宽占用超高!
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
引用 8 楼 qiangv 的回复:
1、缓存数据的多少,这个涉及带宽等问题,具体的算法具体分析; ... ...
客户端是会缓存的,服务器缓存也是没问题。 一般客户端播放跳转等对服务器的请求,服务器会把这些命令下发给设备,由设备处理,由设备直接发送请求数据给服务器从而至客户端。 客户端请求服务器数据,若从服务器直接索要的是缓存数据的话,涉及的是服务器对于视频流数据的协议包头解析,其实直接的结果就是:比较从设备直接获取和从服务器缓存解析获取哪个更方便和快捷,资源消耗更低。 所以我倾向的是服务器不操作视频流,但是现在看来是行不通了,我必须分析视频流,至少是分析视频流的协议头信息,来获取相关的帧信息及时间戳,从而根据这些来控制发送相关内容。 还有就是这些控制相关的内容主要还是由服务器来完成的。。。。一直如此,客户端是展现,有一个几十帧的缓存,最好还是不让客户端来完做。
sniffer12345 2014-02-18
  • 打赏
  • 举报
回复
引用 7 楼 safeili 的回复:
[quote=引用 6 楼 qiangv 的回复:] 你讲数据发给前台? 让前台自己解码如何?把缓存移到前台去。
这种方式是可以的,开发量留给前台客户端人员,他们做缓存,自己播放自己解码,但是会引申其他问题。 1.缓存大小,每次缓存多少数据合适。因为视频图像涉及到带宽问题,一次缓存较多,若不播放直接跳转则是严重的带宽和资源的浪费。若缓存较少,之间的命令交互又会相当的频繁,因为服务器端充当着媒体转发的功能,并不能直接socket阻塞接收。 2.还有一点很现实的问题,认定为是服务器问题,服务器解决。。。。当服务器真的无法解决时才会涉及到其他模块。也就是说不到万不得已还是自己模块上面解决比较好。[/quote] 无论服务器是否控制,你都应该做本地文件缓存。 你要做两级缓存,一级是文件的,一级是内存的,收发都一样。cache管理的话一方面LRU,一方面就是给个阀值,然后用户可以清空。大家通用的做法,楼主不用纠结了。
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
引用 5 楼 xiaoxiaoyu85 的回复:
[quote=引用 3 楼 safeili 的回复:] [quote=引用 1 楼 turingo 的回复:] 开辟足够的缓冲区即可,第三方发送过来的数据,你只需要简单的先放在缓冲区即可,而你观看的数据从缓冲区取,而不是直接从第三方取就行了。 [quote=引用 楼主 safeili 的回复:] RT, 兄弟做视频平台的服务器端,主要是为前台的客户端提供相关的数据信息。 数据获取是通过相关协议从第三方设备中获取,现在遇到一个问题: 当获取视频流时,第三方会把某一段时间内的视频流不计速度的发送过来,而非我观看的速度。且并不一定是按照固定的帧率发送,且不是一包一帧或者几包一帧的固定速率。 请问在不解码的前提下,我作为服务器怎么能够将视频数据有控制的给前台客户端,又或者有无其他的方式。 第三方修改基本不考虑了!人家不考虑这个问题。只能从自己的平台着手。 各位兄弟姐妹们给点意见,谢谢!!
[/quote] 缓存...这样还要建立在我自己解码的基础上,不然怎么根据每秒的帧率来发送数据!何况到底是几包一帧也不清楚,也就是说是变化的!不确定。[/quote] 是用RTP/RTCP协议发送的吧,帧头就应该有时间戳。我只做过TCP协议传顺序帧,也不是很了解RTP,最近打算学习下。求楼下高手[/quote] 目前一般是TCP/UDP 模式,大多采用TCP。 还有目前主流设备很多选用 RTSP协议
qiangv 2014-02-18
  • 打赏
  • 举报
回复
1、缓存数据的多少,这个涉及带宽等问题,具体的算法具体分析; 不管如何,客户端都需要缓存的,因为服务器到客户端也是通过网络通信来的。另外服务器端也可以缓存,但不涉及解码,缓存的数据是留给客户端请求用的(不涉及解码)。 2、这个参见1,不管服务端要不要缓存,客户端肯定要,总不能放任不管,客户端收到多少播放多少吧,这样的用户体验太差了,网络一卡,客户端也卡。(推诿是会存在,但是都身为技术出身的,方案合理一说出来还是一目了然的)
雾雨峰 2014-02-18
  • 打赏
  • 举报
回复
引用 6 楼 qiangv 的回复:
你讲数据发给前台? 让前台自己解码如何?把缓存移到前台去。
这种方式是可以的,开发量留给前台客户端人员,他们做缓存,自己播放自己解码,但是会引申其他问题。 1.缓存大小,每次缓存多少数据合适。因为视频图像涉及到带宽问题,一次缓存较多,若不播放直接跳转则是严重的带宽和资源的浪费。若缓存较少,之间的命令交互又会相当的频繁,因为服务器端充当着媒体转发的功能,并不能直接socket阻塞接收。 2.还有一点很现实的问题,认定为是服务器问题,服务器解决。。。。当服务器真的无法解决时才会涉及到其他模块。也就是说不到万不得已还是自己模块上面解决比较好。
qiangv 2014-02-18
  • 打赏
  • 举报
回复
你讲数据发给前台? 让前台自己解码如何?把缓存移到前台去。
01-课程计划02-Activiti工作流概念(使用程序演示工作流执行)03-Activiti介绍04-准备Activiti开发环境05-准备开发环境(配置文件)和核心API的介绍06-Activiti入门程序HelloWorld演示流程的执行07-流程定义的CRUD(上)08-流程定义的CRUD(下)09-流程实例,任务,执行对象控制流程的执行(上)10-流程实例,任务,执行对象控制流程的执行(下)11-流程变量(上)12-流程变量(下)13-流程历史数据查询14-第一天知识点回顾15-连线16-排他网关17-并行网关18-流程实例开始结束19-接收任务活动(receiveTask)20-个人任务分配(三种方式)21-组任务分配(三种方式)22-工作流提供的用户角色组(IdentityService)23-项目框架搭建(Struts)24-请假流程管理系统框架搭建(Spring+Struts)25-请假流程图26-知识点回顾27-系统登录(Session)28-自定义拦截器实现Session验证29-部署流程定义(zip文件部署)30-流程定义和部署对象查询31-查看流程图和删除流程定义32-请假单业务的查询列表和新增保存33-请假单业务的编辑保存和删除34-申请请假(启动流程实例)35-查找正在执行的个人任务列表36-使用类动态指定下一个任务的办理人37-办理任务(获取任务节点form key中的值)38-办理任务(使用任务ID,查询请假单)39-办理任务(使用任务ID,查询任务完成后的连线名称集合)40-完成任务41-查询办理任务时操作的历史批注信息(上)42-查询办理任务时操作的历史批注信息(下)43-在请假单中查询历史批注信息(使用请假单ID查询)44-查看当前流程图和课程总结

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧