jerrylipeng

jerrylipeng

1个粉丝

11

问答

0

专栏

0

资料

jerrylipeng  发布于  2016-05-17 17:56:09
采纳率 0%
11个问答
3915

3531视频解码同步

 
在两个独立的3531板上,通过rtsp接收H264码流,并解码显示,希望图像能尽可能同步。
应该如何实现呢?
我来回答
回答8个
时间排序
认可量排序

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-05-18 04:19:44
认可0
本帖最后由 ngswfx 于 2016-5-18 05:04 编辑

最近我也想搞这个,用来做数字矩阵的画面拼接。这种方法比较愚笨,不太专业,但简单直接,能实现大屏控制里面的拼接问题,节约一个VGA或者HDMI矩阵,听用过的客户说效果还行,基本能接受,没感觉到太大断层现象(原来这个方法我就设想过,总觉得可能断层,画面不同步,比较难搞,既然别人做的不错,理论上就应该可行,如果能控制在40ms以内,应该不容易察觉),如果是这样,就基本可行。

我的初步设想是:某个通道收到rtsp或者NVR图像数据,如果再收到指令,要求9个HDMI输出拼接画面。
我会将已经连接RTSP流的图像进行以帧为单位的打包封装,里面包含当前系统时间,帧时间等用来同步的信息。
然后另外8个解码设备默认开启一个端口用来接收这种数据流。收到以后,直接在接收线程内部进行压入式block解码。发送端需要开启8个线程,强制网络送出数据。

如果考虑到某个设备异常,导致发送异常,可能需要做帧缓冲,而且不能是串行发送,一定要并行,尽量确保各个目标发送数据同步。

///如果有缓冲,当某个接收端收到数据后,需要根据另外发送过来的系统同步时间信息、本次收到数据的时间,上次解码完成时刻的时间(本设备端不停获取系统时间,根据这几个时间,进行对比分析,计算出需要延迟等待的时间),进行判断,是否进行立刻解码,还是稍微等待。



//////////初步考虑的步骤
1、向相关设备发送时间校准,将当前主设备时间发送到所有设备,1秒发送一次,进行毫秒级别时间校准。有了这个基准时间,我们默认认为各个设备时间基本同步了(最起码8个设备时间基本同步了,我估计精度应该可以做到1-2ms),如果考虑到函数执行获取的时间差,让其中一个设备把时间再次回传回来,不停校准,找出网络方面的延迟,避免主设备的时间和其他8个设备时间不同步。
2、和帧相关的时间,记录要解码的某帧的PTS,然后得到主设备准备送入解码的时间(由1000除以帧率,通常25帧应该为40ms),主通道在约40ms后,才送入数据到本设备解码,在解码前,将帧数据拷贝到发送缓冲当中,开启发送开关,由优先级较高的8个发送线程,同时发送。
3、远端收到数据后,计算需要延迟的时间,然后送入专用拼接解码通道,然后按照拼接位置显示画面。



///////////扩展设想,鼠标难题。飘来飘去的鼠标。:lol             图像好说,延迟一两百ms问题不大,鼠标就麻烦了,如果传输过去的图像是电脑画面(电脑图像经过编码,解码,同步显示好多动作,延迟基本在100-200ms),还要进行鼠标操作,这就不行了,为此设想采用某个硬件的方法,将电脑的鼠标坐标数据直接发送到所有9个拼接设备单元上,利用图形层,再叠加一个实时性更强的超大鼠标指针。初步设想是操作的电脑,用网络方法,装鼠标钩子程序(自动探测系统内的数字矩阵),然后坐标(还有电脑ID号),发送给9个解码器单元,直接判断叠加。要是能通过485或者232直接发送相关数据也可以。要么就是直接用蓝牙鼠标的方法。
              能够设想到的效果时,鼠标基本实时了,点击后,还是要等100-200ms,对话框界面才发生状态改变。但总比慢慢悠悠等鼠标飘过来舒服些:lol 。 1-2台电脑还好说,多了系统构架也一堆麻烦事。所以嘛,要是有这种设备就好了,硬件级别的鼠标一对多蓝牙。使用一个鼠标,一堆蓝牙模块同步接收(我感觉应该不难做 或者NRF2401也行呀)。然后就是有实时性需求的主操作电脑,装一个蓝牙接收器,数字矩阵也装一个。

jerrylipeng

1个粉丝

11

问答

0

专栏

0

资料

jerrylipeng 2016-05-18 09:14:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30152&ptid=11340]ngswfx 发表于 2016-5-18 04:19[/url]
最近我也想搞这个,用来做数字矩阵的画面拼接。这种方法比较愚笨,不太专业,但简单直接,能实现大屏控制里 ...[/quote]

非常感谢你的分享!!

看到你说要发送端开启8个线程,这个主要是想同时向8个接收设备发送图像数据包吧?
我的想法是用组播,rtsp本来就支持,如果路由器也支持的话(好一点的都支持吧),那么8个接收设备应该能(理论上)同时接收到数据包了吧,后面要做的就是让解码和显示同步起来

刚开始学3531,好多都不是很清楚,理解有误的地方请指出:)

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-05-18 12:14:01
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30169&ptid=11340]jerrylipeng 发表于 2016-5-18 09:14[/url]
非常感谢你的分享!!

看到你说要发送端开启8个线程,这个主要是想同时向8个接收设备发送图像数据包吧 ...[/quote]

/////////////////////////组播可能更适合干这个事情些。  

falloutmx

1个粉丝

15

问答

0

专栏

0

资料

falloutmx 2016-05-30 16:27:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30152&ptid=11340]ngswfx 发表于 2016-5-18 04:19[/url]
最近我也想搞这个,用来做数字矩阵的画面拼接。这种方法比较愚笨,不太专业,但简单直接,能实现大屏控制里 ...[/quote]

你这个同步大概能到多少ms?我按照理论估算最小也得有一帧的误差,不知道有没有人能做到完全同步

ngswfx

2个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-05-30 22:07:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30878&ptid=11340]falloutmx 发表于 2016-5-30 16:27[/url]
你这个同步大概能到多少ms?我按照理论估算最小也得有一帧的误差,不知道有没有人能做到完全同步[/quote]

估计能控制到50-100ms,1-3帧,大部分时间应该在50ms以内,这样的话,运动慢的物体,不明显。
//我自己测试了一下,往4个解码通道送入4个相同流,不同窗体显示不同部分,最后在一个窗体上拼接。效果很好。所以关键点就是网络传输。

william_ling

0个粉丝

8

问答

0

专栏

1

资料

william_ling 2019-11-23 15:23:43
认可0
楼主  请问你这个同步是如何实现  能说说吗

徐红丽

0个粉丝

1

问答

0

专栏

0

资料

徐红丽 2021-10-08 15:07:37
认可0

楼主,您好!请问同步问题解决了吗?

追梦一生

0个粉丝

0

问答

0

专栏

0

资料

追梦一生 2021-10-22 23:14:24
认可0

值得参考,谢谢大家回复。

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区