4
4
#include " ns3/log.h"
5
5
#include " ns3/nstime.h"
6
6
#include " ns3/packet.h"
7
+ #include < string>
7
8
namespace ns3
8
9
{
9
10
NS_LOG_COMPONENT_DEFINE (" SimSender" );
10
11
SimSender::SimSender ()
11
12
{
12
- m_frame_id=0 ;
13
- m_packet_id=0 ;
14
13
m_transport_seq=0 ;
15
14
m_active=true ;
16
15
m_first_ts=-1 ;
17
- m_remb=0 ;// 0 open receiver bandwidth estimate
16
+ m_remb=1 ;// 0 open receiver bandwidth estimate
18
17
m_paceTime=5 ;
19
18
m_segmentSize=1000 ;
20
19
m_lossFraction=0 ;
21
- m_paceQueueLen=300 ;
20
+ m_paceQueueLen=3000 ; // 300; change it
22
21
m_maxSplitPackets=1000 ;
23
22
m_cc=razor_sender_create ((void *)this ,&SimSender::ChangeBitRate,(void *)this ,
24
23
&SimSender::PacePacketSend,m_paceQueueLen);
@@ -68,7 +67,7 @@ void SimSender::UpdateRtt(uint32_t rtt,uint32_t rtt_var)
68
67
}
69
68
void SimSender::ProcessFeedBack (sim_feedback_t feedback)
70
69
{
71
- NS_LOG_FUNCTION_NOARGS ();
70
+ // NS_LOG_FUNCTION_NOARGS();
72
71
if (m_cc!=NULL )
73
72
{
74
73
m_cc->on_feedback (m_cc,feedback.feedback ,feedback.feedback_size );
@@ -123,10 +122,9 @@ void SimSender::PutFakeData(uint8_t ftype,uint32_t size)
123
122
{
124
123
timestamp=(uint32_t )(now_ts-m_first_ts);
125
124
}
126
- ++m_frame_id;
127
125
for (i=0 ;i<total;i++)
128
126
{
129
- seg.packet_id =++ m_packet_id;
127
+ seg.packet_id =m_packet_id;
130
128
seg.fid =m_frame_id;
131
129
seg.ftype =ftype;
132
130
seg.index =i;
@@ -139,7 +137,9 @@ void SimSender::PutFakeData(uint8_t ftype,uint32_t size)
139
137
seg.data_size =splits[i];
140
138
m_cache.insert (std::make_pair (seg.packet_id ,seg));
141
139
m_cc->add_packet (m_cc,seg.packet_id ,0 ,seg.data_size +header_len);
140
+ m_packet_id++;
142
141
}
142
+ m_frame_id++;
143
143
// NS_LOG_INFO("splits packet "<<total);
144
144
}
145
145
void SimSender::SetSendSegmentCallback (Callback<void ,Ptr <Packet>>sendPacket)
@@ -152,7 +152,7 @@ void SimSender::SetVideoBitChangeCallback(Callback<void,uint32_t> changeBitRate)
152
152
}
153
153
void SimSender::ChangeBitRate (void * trigger, uint32_t bitrate, uint8_t fraction_loss, uint32_t rtt)
154
154
{
155
- NS_LOG_FUNCTION ( Simulator::Now().GetMilliSeconds() );
155
+ double now= Simulator::Now ().GetSeconds ( );
156
156
SimSender *obj=static_cast <SimSender*>(trigger);
157
157
uint32_t overhead_bitrate, per_packets_second, payload_bitrate, video_bitrate_kbps;
158
158
double loss;
@@ -168,20 +168,22 @@ void SimSender::ChangeBitRate(void* trigger, uint32_t bitrate, uint8_t fraction_
168
168
{
169
169
obj->m_lossFraction =(3 *obj->m_lossFraction +fraction_loss)/4 ;
170
170
}
171
- loss=obj->m_lossFraction /255.0 ;
171
+ loss=( double ) obj->m_lossFraction /255.0 ;
172
172
if (loss > 0.5 )
173
173
loss = 0.5 ;
174
174
video_bitrate_kbps = (uint32_t )((1.0 - loss) * payload_bitrate) / 1000 ;
175
- NS_LOG_INFO (" bitrate " <<bitrate <<" change bitrate " <<video_bitrate_kbps<< " kbps " );
175
+ NS_LOG_INFO (std::to_string(now)<<" "<<video_bitrate_kbps <<" l "<<std::to_string(loss) );
176
176
if (!obj->m_changeBitRate .IsNull ())
177
177
{
178
- obj->m_changeBitRate (video_bitrate_kbps);
178
+ // to prevent channel overuse
179
+ uint32_t protect_rate=video_bitrate_kbps;
180
+ obj->m_changeBitRate (protect_rate);// video_bitrate_kbps
179
181
}
180
182
181
183
}
182
184
void SimSender::PacePacketSend (void * handler, uint32_t packet_id, int retrans, size_t size)
183
185
{
184
- NS_LOG_INFO (Simulator::Now().GetMilliSeconds()<<"packet send "<<packet_id<<"size "<<size);
186
+ // NS_LOG_INFO(Simulator::Now().GetMilliSeconds()<<"packet send "<<packet_id<<"size "<<size);
185
187
SimSender *obj=static_cast <SimSender*>(handler);
186
188
if (!obj->m_sendPacket .IsNull ())
187
189
{
@@ -197,12 +199,15 @@ void SimSender::PacePacketSend(void* handler, uint32_t packet_id, int retrans, s
197
199
segment.send_ts =(uint16_t )(Simulator::Now ().GetMilliSeconds ()-obj->m_first_ts -segment.timestamp );
198
200
segment.transport_seq =++(obj->m_transport_seq );
199
201
obj->m_cache .erase (iter);
202
+ if (!obj->m_sentSeqCb .IsNull ()){
203
+ obj->m_sentSeqCb (segment.packet_id );
204
+ }
200
205
uint8_t header_len=sizeof (sim_header_t )+sizeof (sim_segment_t );
201
206
if (obj->m_cc )
202
207
{
203
208
obj->m_cc ->on_send (obj->m_cc ,segment.transport_seq ,header_len+segment.data_size );
204
209
}
205
- NS_LOG_INFO (" packet_id" <<packet_id<<" seq" <<segment.transport_seq);
210
+ // NS_LOG_INFO("packet_id"<<packet_id<<"seq"<<segment.transport_seq);
206
211
sim_header_t sHeader =obj->m_header ;
207
212
sHeader .mid =RazorProtoType::SIM_SEG;
208
213
RazorHeader header;
0 commit comments