Linux C语言UDP实现视频文件上传
文章目录
- UDP文件上传
- 包结构
- 客户端
- 服务端
UDP文件上传
项目gitee地址
通过socket(AF_INET, SOCK_DGRAM, 0)建议数据套接字,实现udp协议上传视频操作。
可以上传10M级文件,更大一点的没有测试,应该也可以传输。
内部实现通过malloc动态分配内存,给数据包打上用户id,包索引值,以及结束标识符。
包结构
发送接受的包结构示意:
- [index] [flag] [userId] [data]
- index:包索引值
- flag:标识字节,如果为0表示该包为中间包,为1表示为结束包,大于1表示此时传送的是第一个包,flag为长度值。
- userId:用户id标识。
- data:字符串数据指针,最大长度为1K。
客户端
先生成一个userId,然后每个包的第三个字节都为这个userId,表示这些包是同一个客户机发送的。
1、开始包:上传时先发送文件长度包,服务端根据文件长度包动态构建缓冲区存储数据。
2、中间包:中间包发送数据,并通过变量i给每个包打上索引值。
3、结束包:发送结束包时将flag置1。
发送需要一定延迟 避免服务器处理不过来
服务端
- 1、定义一个结构体用来保存用户的数据缓冲区。并定义一个大小为10的全局数组,表示同时最多可以有十个用户传输数据。
struct RecvData {// 标识用户int userId;// 是否结束,1表示结束int flag;// 数据缓存区// char buff[PACKET_SEQ][LENGTH];char **buff;
};
// 定义单个用户的结束数据类型
typedef struct RecvData RecvData;// 定义10个用户存储区
RecvData datas[DATAS_LENGTH];
2、接收数据,先解包,提取前三个字节的值。然后有三种包:
- 1、如果index=0表示为第一个包,为长度包,将userId占用一个缓冲区,并为其分配相关长度的内存。
- 2、如果index不等于0并且flag不为1,表示这个包为中间包,将它的数据拷贝到其userId所在的缓冲区的buff[index]中。
- 3、如果flag为1,表示这个包为结束包,打印相关信息,然后新开一个线程生成文件。
3、生成文件。将指定userId对应的RecvData块的buff指针中的数据按照index的顺序逐步取出,然后写入创建的文件中,最后清理userId所占用的那个RecvData块,准备被下一个userId占用。
Linux C语言UDP实现视频文件上传相关推荐
- 如何基于OSS和MPS,快速搭建音视频文件上传服务?
背景 本文主要介绍如何基于OSS服务和MPS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MPS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS Token ...
- 如何基于OSS和MTS,快速搭建音视频文件上传服务?
摘要: 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MTS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS To ...
- linux+nginx+mysql+php系统修改文件上传大小限制
linux+nginx+mysql+php系统修改文件上传大小限制 对于LNMP框架的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,会报错&quo ...
- php视频上传教程,PHP实现视频文件上传完整实例,_PHP教程
PHP实现视频文件上传完整实例, 本文以一个完整实例的形式实现了视频文件上传的功能.虽然是比较基础的应用,仍有一定的参考价值.分享给大家供大家参考之用.具体方法如下: 首先,对PHP来说视频也属于文件 ...
- android 与后台实时视频,android选择视频文件上传到后台服务器
本文实例为大家分享了android选择视频文件上传到后台服务器的具体代码,供大家参考,具体内容如下 选择本地视频文件 首先第一步打开打开相册选择视频文件: Intent intent = new In ...
- 解决阿里云oss文件上传部分MP4格式视频文件上传导致上传崩溃问题
解决阿里云oss文件上传部分MP4格式视频文件上传导致上传崩溃问题 问题描述 java程序,使用阿里云oss文件上传服务,在测试时偶然发现,我用苹果手机开启高清进行摄像,将原图通过qq传到电脑上,在电 ...
- linux 安装上传文件,linux常用命令(二)文件上传下载及软件安装
1.上传下载工具安装 (1)WINDOWS 到linux的文件上传及下载: windows下打开secureCRT,通过SSH连到⾄至远程linux主机: 上传下载工具安装命令:yum -y inst ...
- 大视频上传服务器,支持HTML5断点续传,支持4GB以上大视频文件上传
当前,我们正处于一个视频爆炸的时代,高清智能手机人人都有,各种场景下的视频应用越来越多,4K高清视频正在普及,视频文件尺寸动辄几个GB.当我们需要和他人分享这些大视频时,视频的上传和断点续传文件立马出 ...
- 阿里云视频点播服务SDK的使用,视频文件上传测试
文章目录 阿里云视频点播技术简介 一.阿里云视频点播技术能力盘点 1.应用场景 2.功能介绍 二.开通视频点播云平台 1.选择视频点播服务 2.开通视频点播 3.选择按使用流量计费 4.资费说明 5. ...
- m3u8 php vob 服务器,视频文件上传服务器使用FFmpeg自动切片成m3u8
程序运行环境:lnamp centos 6.8 nginx 1.6 apache 2.4 mysql 5.5 php 5.6 遇到问题: 1,js 上传文件,由于文件服务器不是本地服务器,单独配置的文 ...
最新文章
- Eclipse SDK构建J2EE开发环境
- 花小猪,真正的对手是谁?
- 正则表达式:Pattern 与Matcher
- 易驾佳智能机器人教练_机器人教练创始人马宏先生受邀到中国人民大学进行经验分享...
- c语言编程15,c语言编程15题.doc
- Python的第三方库fileType
- Elementary OS 使用fcitx安装搜狗词库、搜狗输入法(Ubuntu通用)
- 使用FlashCS6制作cocos2d-x动作脚本的思路整理
- python画折线统计图画区间_matplotlib-折线图、散点图
- torch 中的 stft、torchaudio 中的 Spectrogram、Melscale、MelSpectrogram 的使用
- 解除宝塔面板强制绑定手机号教程
- 中国塑料杯市场需求预测与发展前景分析报告2022-2027年
- xp如何快速升级win10系统
- 163免费邮件群发平台,企业群发邮件的哪个好?企业邮件群发助手
- Visual Paradigm 如何绘制平面图?
- 【ModelMapper简单使用】
- 虚拟主机mv命令选项移动文件夹
- easyefi添加引导盘重启消失引导解决办法
- 互联网日报 | 蔚来汽车股价年内涨幅近十倍;小米成立可穿戴部;恒大物业拟12月2日港交所上市...
- codeforce_div3_round527_ABCDEF
热门文章
- python3调用arcpy地理加权回归_地理加权回归( GWR)
- 浅谈数据分析和数据建模
- 【读书笔记】企业IT架构转型之道 阿里巴巴中台战略思想和架构实战
- tiledmap 图块属性_cocos2dx[3.4](25)——瓦片地图TiledMap
- 免费进销存真的好用吗?一文告诉你真相
- mysql数据类型及占用字节数
- 易班自动答题脚本_如何使用python进行自动网上考试
- cocos2dx lua 升级spine兼容Spine库v3.8到最新版本
- 倍福TwinCAT3中控制台达A2伺服使用
- 白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵