读书人

视频会议中也许录播中使用RTP协议接收

发布时间: 2012-11-23 22:54:33 作者: rapoo

视频会议中或者录播中使用RTP协议接收h264视频

此程序文章献给刚进公司的需要帮助的程序员,

说明:1 该代码在windows上运行,用vs2010编译。

2 该代码要能解决移植的问题。

3 rtp实时传输协议可以使用udp,也可以使用tcp协议

首先,为了减小程序的难度,说明使用的库解码库为ffmpeg,刷视频数据的方法可以使用

1 SDL库 ,到sdl的源代码网站中下载并编译

2 直接使用gdi, 并且解决翻转问题。

3 使用opengl或者direct3d, 或者directdraw。

基础知识:

A 首先RTP 包结构一般为12字节,传输层协议中UDP协议和TCP协议是可选的,都可以用,多数使用了UDP协议,如果要扫盲,请链接到基维百

科http://zh.wikipedia.org/wiki/%E5%AE%9E%E6%97%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE,使用tcp协议的好处是和rtsp协议

相关联的,涉及到nat转换 路由方面的知识,我后面会讲,而UDP协议在h264等视频发送的时候要注意的是分包问题,主要是MTU最大传输单元的问题,h264的

nalu如果超过最大传输单元,必须分割发送。

B ffmpeg1.0 已经及其优秀,包含ffmpeg库不要忘了 extern “C”extern "C"{#include #include #include #include }为了使得快速开发出一个原型,使用boost的asio库,

可以节省一些时间。并且使用回调函数来解码和刷屏,以下是使用asio库来接收网络的包,默认使用了组播地址,也就是说假设该h264视频会传送到组播地址上,传送到

组播地址的好处是调试方便,在局域网内接收都可以。

这是网络接收类的一个头文件示例,读者完全可以不使用boost库,自行写出:


}

代码暂时只是为了演示,并不完整,不过基本过程是非常清楚的。过程中其实还需要处理一个比较傲重要的问题就是分辨率改变的问题,音视频同步的问题,播放过快或者过慢的问题,如果要测试发送的视频是否正确,可以使用vlc来接收测试。

这是第一篇基础,后面再准备比较完整的示例和用d3d,sdl刷屏,并且加入音频的解码,属于第二篇。

未完待续。。。。。。

读书人网 >编程

热点推荐