欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NS3-----如何在仿真网络中传输视频流

程序员文章站 2022-07-06 13:20:18
...

NS3-----如何在仿真网络中传输视频流

问题叙述

在利用NS3来仿真网络时,我们经常遇到如何模拟传输视频流(video)的问题。而ns3::OnOffAppcation是一种很好的替代方案。
但是,有时候仿真时需要传输真正的视频时,就无法使用OnOffAppcation。经过在网上查找和学习,总结了以下两种可以使用的方案。

解决方案

Tap-Bridge:A bridge to make it appear that a real host process is connected to an ns-3 net device.

Override: 顾名思义,将应用程序类的Send()方法进行重写,将原本需要发送的包数据替换为我们希望的视频数据。

Tap-Bridge

关于Tap-Bridge的学习,因为较为复杂然后发现来不及完成实验,因此该方案并没有什么可扩展的。如果有感兴趣的同学,可以去查看NS3 wiki的HOWTOs学习。
HOWTO make ns-3 interact with the real world
HOWTO Use Linux Containers to set up virtual networks

Override-重写源码

在进行Send()方法进行重写时,首先需要考虑怎么讲视频数据填充入Packet数据当中。
在网上进行查询后,发现ns3::UdpEchoClient的SetFill()方法可以很好地满足需求,能够帮助我们填充Packet的相应字段。

SetFill():Set the data fill of the packet (what is sent as data to the server) to the repeated contents of the fill byte.

因此,考虑可以考虑重写ns3::UdpEchoClient的Send()方法来实现发送视频包。
其具体步骤如下:

1.将ns3::UdpEchoClient源码中的Send()方法copy到自己的脚本(注意:不要直接在源码修改,会导致重新编译,花费太久的时间
2.将自己需要修改的代码添加至Send()方法中。(如果不是自己需要,不必将Send()其他代码删除
3.修改服务器应用程序的HandleRead()方法,用于处理接收到的视频数据(如果没有重写HadnleRead(),则服务器无法处理视频数据将导致程序运行失败)
4.运行程序,查看程序运行结果

附录

NS3-----如何在仿真网络中传输视频流
NS3-----如何在仿真网络中传输视频流

相关标签: ns3 网络