假定1km 长的CSMA/CD 网络的数据率为 1Gbit/s。设信号在网络上的传播速率为 200000km/ s。 求能够使用此协议的最短帧长。
时间: 2024-02-17 20:05:12 浏览: 186
_samples = av_rescale_rnd(swr_get_delay(swr_ctx, codec_ctx->sample_rate) + filtered_frame->nb_samples,
44100, codec_ctx->sample_rate, AV_ROUND_UP);
av_frame_get_buffer(resampled_frame, 0);
sw根据CSMA/CD协议,当一台主机要发送数据时,它首先要检测信道是否空r_convert(swr_ctx, resampled_frame->data, resampled_frame->nb_samples,
(const uint8_t**)filtered_frame闲,如果空闲则可以发送数据,否则等待一段随机时间后再次检测。如果发送的数据->data, filtered_frame->nb_samples);
av_buffersrc_add_frame_flags(filter_ctx, NULL, AV_BUFFERSRC_FLAG_KEEP_REF在信道上与其他主机发送的数据发生了碰撞,则所有发送的主机都会停止发送数据并);
av_frame_free(&filtered_frame);
resampled_frame->pts = av_rescale_q(frame->pts, input_ctx->streams等待一段随机时间后再次尝试发送。
根据题目条件,可以计算出信号在网络上[audio_stream_index]->time_base, output_stream->time_base);
av_interleaved_write_frame(output_ctx, resampled_frame);
的传播延迟为 1 km / 200000 km/s = 5 μs。另外,数据率为 1 Gbit/s,即每秒可以发送 1 Gbit 的数据。因此,每个位的传输时间为 1 av_frame_free(&resampled_frame);
}
}
}
av_frame_free(&frame);
}
av_packet_unref / 1 Gbps = 1 ns。
根据CSMA/CD协议的要求,在发送完整个帧之前(&pkt);
}
// Flush filter graph.
av_buffersrc_add_frame_flags(filter_ctx, NULL, AV_BUFFERSRC_FLAG_KEEP,发送方必须持续发送数据,以确保其他主机能够检测到正在发送的信号,从而_REF);
while (av_buffersink_get_frame(filter_ctx, av_frame_alloc()) >= 0);
// Finalize output file.
避免碰撞。因此,帧长必须至少是传输一个最小数据包所需的时间。最小 av_write_trailer(output_ctx);
avio_close(output_ctx->pb);
avformat_free_context(output_ctx);
// Clean up数据包长度为 64 字节,即 512 比特。因此,传输一个最小数据包所需的时间.
swr_free(&swr_ctx);
avfilter_inout_free(&input_filter);
avfilter_inout_free(&output_filter为 512 ns。
综上所述,能够使用此协议的最短帧长为 5 μs / 512);
avfilter_graph_free(&filter_graph);
avcodec_free_context(&codec_ctx);
avformat_close_input(&input_ctx);
ns = 9.77,即最少需要传输 10 个最小数据包才能确保其他主机能 return 0;
}
```
该代码使用 FFmpeg 库中的 AVFilter 进行音频重采样,并将结果写够检测到正在发送的信号并避免碰撞。因此,最短帧长为 10 × 64 字节 = 640 字节。
阅读全文