socket传输视频数据

pmars 2010-09-27 05:56:01
我想写socket来传输AVI等视频文件,
我在读视频的时候是不是应该用二进制的方式来读啊?
在发送的时候需要注意什么呢?
接收的时候怎么来存这些数据?
自己来建一个缓冲区?
求各位给我支个招啊!
都需要用到哪些东西???
...全文
557 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlp_liqing 2012-05-22
  • 打赏
  • 举报
回复
楼主可否流个联系方式,我的毕设做这方面的。。。。有些问题可一起探讨
pmars 2010-09-30
  • 打赏
  • 举报
回复
我应该以什么形式读出和写入数据啊?当我读视频文件的时候?
xgPaul 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 pmars 的回复:]
引用 13 楼 flydreamgg 的回复:
引用 12 楼 pmars 的回复:
另外,我在读文件的时候应该怎么去读啊?
我觉得不能一下就都给文件读过来吧,要是小的话可以,要是有几十G的东西,那就完蛋了不是么?


你读多少发多少啊!

我是说,在读一个5G大小的文件时,不能一下就读到内存中吧!
需要怎么做呢?
[/Quote]
可以每次读1024字节,并立即发送1024字节,接收端同时正在接收数据,并同时写入文件中。。。
pmars 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 flydreamgg 的回复:]
引用 12 楼 pmars 的回复:
另外,我在读文件的时候应该怎么去读啊?
我觉得不能一下就都给文件读过来吧,要是小的话可以,要是有几十G的东西,那就完蛋了不是么?


你读多少发多少啊!
[/Quote]
我是说,在读一个5G大小的文件时,不能一下就读到内存中吧!
需要怎么做呢?
昨夜无风 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pmars 的回复:]
另外,我在读文件的时候应该怎么去读啊?
我觉得不能一下就都给文件读过来吧,要是小的话可以,要是有几十G的东西,那就完蛋了不是么?
[/Quote]

你读多少发多少啊!
pmars 2010-09-28
  • 打赏
  • 举报
回复
另外,我在读文件的时候应该怎么去读啊?
我觉得不能一下就都给文件读过来吧,要是小的话可以,要是有几十G的东西,那就完蛋了不是么?
pmars 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xgpaul 的回复:]
是直接写到文件末尾的。。。
[/Quote]
哦,这个真是个好消息啊!
xgPaul 2010-09-28
  • 打赏
  • 举报
回复
是直接写到文件末尾的。。。
pmars 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liplusplus 的回复:]
自己定义写协议,发送数据一包一包发送,把每包数据的需要标识的信息都加上,收数据的时候按照你自己定的协议拆包就行,系统自己的缓冲区就不用管,你只管用函数接收数据就是了。每个socket系统都会建立一个缓冲区,你发送接收的数据都是先到的缓冲区,然后由底层帮你在网络上传输!
[/Quote]
我刚才去网上看了一些代码,有个程序是在循环接收数据,之后他直接调用CFile::Write(),这个函数在写的时候直接写到了文件的末尾么?
liplusplus 2010-09-28
  • 打赏
  • 举报
回复
自己定义写协议,发送数据一包一包发送,把每包数据的需要标识的信息都加上,收数据的时候按照你自己定的协议拆包就行,系统自己的缓冲区就不用管,你只管用函数接收数据就是了。每个socket系统都会建立一个缓冲区,你发送接收的数据都是先到的缓冲区,然后由底层帮你在网络上传输!
pmars 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xgpaul 的回复:]
引用 5 楼 pmars 的回复:
引用 2 楼 fsq2006 的回复:
视频数据和其他的文件数据一样发,socket本身就有缓冲区了

socket 本身的缓冲区是怎么回事 ?

每个socket都有一个接收缓冲区和发送缓冲区,你send函数返回,只是把要发送的数据发送到了发送缓冲区,再由底层进行处理。。。
[/Quote]
那底层在缓冲区满的时候就发送出去吧,如果我的缓冲区不满的话呢?它将怎么处理?
还有就是,我要去传一个很大的文件,也就是说自己建一个缓冲是不可行的,文件直接读过来也不可行,这样我应该怎么去处理呢?
我的想法是在打开文件的时候弄一个指针指向文件头,之后读一部分到缓冲发出去,指针移动,之后循环读取。。。
这种方式可行么?
xgPaul 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pmars 的回复:]
引用 2 楼 fsq2006 的回复:
视频数据和其他的文件数据一样发,socket本身就有缓冲区了

socket 本身的缓冲区是怎么回事 ?
[/Quote]
每个socket都有一个接收缓冲区和发送缓冲区,你send函数返回,只是把要发送的数据发送到了发送缓冲区,再由底层进行处理。。。
pmars 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fsq2006 的回复:]
视频数据和其他的文件数据一样发,socket本身就有缓冲区了
[/Quote]
socket 本身的缓冲区是怎么回事 ?
dxshenhua 2010-09-28
  • 打赏
  • 举报
回复
视频传输怎么说呢,要实现也简单,无非把每一帧的数据封包发出去。好点的摄像头的可以省下YUV转换的开销。要做得好,需要充分利用视频的帧间压缩,那样就复杂了。
pmars 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xgpaul 的回复:]
另外,我在读文件的时候应该怎么去读啊?
我觉得不能一下就都给文件读过来吧,要是小的话可以,要是有几十G的东西,那就完蛋了不是么?


你读多少发多少啊!

我是说,在读一个5G大小的文件时,不能一下就读到内存中吧!
需要怎么做呢?

可以每次读1024字节,并立即发送1024字节,接收端同时正在接收数据,并同时写入文件中。。。[/Quote]
也就是说,我写一个while循环只要读不完的话我就接着读,这个read()函数,是在我上次读到的地方继续读啦??????
sea_spray 2010-09-27
  • 打赏
  • 举报
回复
以前也写了一个传文件的程序,其实传送视频和传送其他文件一样,不用进行特殊处理。
野男孩 2010-09-27
  • 打赏
  • 举报
回复
二进制文件方式读,那是必须的,接收端也是二进制文件方式写。

最简单就是接收方收一包数据,就写文件呗。
fsq2006 2010-09-27
  • 打赏
  • 举报
回复
视频数据和其他的文件数据一样发,socket本身就有缓冲区了
wnx_u 2010-09-27
  • 打赏
  • 举报
回复
直接发就可以了啊
先自己定义协义
然后把文件名等头那件发过去
然后发数据就可以了

如果是TCP,不用进行数据校验那些
如果UDP,还得自己进行数据校验,分包那些

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧