udp协议播放器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除
udp协议播放器
篇一:udp中应用多播技术
java中应用多播技术
最近看了许多java分布式方面书籍,在这里总结一下,介绍分布式应用中一项重要技术,多播通信,并提供我写的一个利用多播技术开发的简易聊天
室程序。
多播技术:多播技术并不是java创造的,它在互联网协议这一层已经提供了相当多的支持,任何语言都可以访问此服务,不过java语言提供了一个访问此服务的相对简单的而又与平台无关的标准接口。
但是,并不像点对点连接中,接收方可以简单的通过要求发送方重发丢失的数据分组,tcp协议就可以容易地纠正诸如丢包这样的小错误,在多点连接中,这些错误中大多数都不能简单的得到修补。
如果在很多接收方中的一个测有收到某个数据分组就不能简单地
给所有的接收方重发这个包。
虽然tcp协议可以提供一个可
靠的服务,但在多播这样的场合,它也无能为力。
至于ip
多播技术虽然也是基于ip协议的,但它使用的是另外一个
不同的传输协议,udp,udp协议可以发送单个的数据分组,我们称为数据报,但它并没有提供任何纠错手段。
多播通信是一类特殊的ip地址(d类ip地址)这些ip 地址并不和任何主机关联,而是专门为多播通信保留下来的,这些地址范围在
224.0.0.1~239.255.255.255这间,其中
224.0.0.1~224.0.0.255是留作为多播路由信息使用的。
此外,所有其它d类ip地址都可以随便进行通信。
举个例子,互联网上的多媒体会议就是一种多播技术的应用程序。
特别是在传输视频数据或是音频数据的场合,偶尔的数据丢失是可以容易克服的,因为这样的场合,当视频数据正在接收端直接播放的时候,后来的数据补足是没有什么用处的。
实时通信中经常就是这样的,传输同样的数据到多个接收方,使用多播技术比使用多个点对点连接要更有效率,因为多播技术在一个通信线程上采用广播的方式只发送一次,路由器自身能够决定它们是否需要发送一个多播消息,而关于一个接收方是否登记为一个多播地址这样的信息也
可以由路由器去处理,另外,多播消息通常带有一个严格的生存周期,它对应着要通过的路由器数量,例如:如果消息的生存期数据为1,那么这个消息就只能在局域网内部传递,
如果这个数值并没有专门的设置,默认是1,因此这样的消
息就被限制在局域网内了。
从jdk1.1以后,包中
对多播套接字提供了支持,为了给一个多播组发送消息,你必须先为一个合适的端口创建一个多播套接字
(multicastsocket)。
inetaddressgroup=inetaddress.getbyname(“226.1.3.5”);
intport=6789;
multicastsocketsocket=newmulticastsocket(port);
发送方没有必要一定登记到一个组里去就可以简单地
往多播地址发送数据,为了做到这一点,它会创建一个datagrampacket对像,把它赋给一个数据缓存,并使用字节数组来填充后通过准备好的套接字发送出去。
byte[]buffer=newbyte[500];
datagrampacketdatagram=new
datagrampacket(buffer,buffer.length,group,port);
datagram.setdata(newstring(“helloworld”).getbytes ());
socket.send(datagram);
为了接收数据不完全统计报,接收方必须将自己登记到一个组里,这可以通过使用发送方指定端口号来创建
multicastsocket,然后再调用joingroup()方法将自己加到这个组里完成登记。
intport=6789;
multicastsocketsocket=newmulticastsocket(port);
inetaddressgroup=inetaddress.getbyname(“226.1.3.5”);
socket.joingroup(group);
接着,接收方就可以等待数据的到来了,实际上,为了不至于阻塞现有应用,这种情况通常需要创建一个专门的线程做无限循环等待,消息是通过字节流传送过来的,为了能够解释数据报中的信息,接收方必须知道要到来的信息数据结构,也就是说,它必须能够从字节流中使用解释过程来重建和发送方一样的数据结构。
while(true){
socket.receive(datagram);
stringmessage=newstring(datagram.getdata());
system.out.println(“datagramreceivedfrom”
+datagram.getaddress().gethostaddress()+”saying:”+message);
}
使用多播技术的聊天室代码:
一点说明,使用ip多播技术不需要一个负责收转消息
的服务器,所以只需要一个客户端就可以了。
.*;
importjava.io.*;
publicclasschatclient{
//gui
//chatFramegui;
//name
stringname;
inetaddressgroup;
multicastsocketsocket;
//设置端口
intport=6789;
//构造函数
publicchatclient(stringname){
=name;
try{
socket=newmulticastsocket(port);
group=inetaddress.getbyname("226.1.3.5");
socket.joingroup(group);
system.out.println("connected......\n");
while(true){
byte[]buffer=newbyte[1000];
datagrampacketdatagram=new
datagrampacket(buffer,buffer.length);
socket.receive(datagram);
stringmessage=newstring(datagram.getdata());system. out.println(message);
}
}catch(exceptione){
system.out.println(e);
}
}
publicvoidsendtexttochat(stringmessage){
message=name+":"+message+"\n";
byte[]buf=(message).getbytes();
datagrampacketdg=newdatagrampacket(buf,buf.length); try{
socket.send(dg);
}catch(exceptione){
system.out.println(e);
}
}
publicvoiddisconnect(){}
publicstaticvoidmain(stringargs[]){
if(args.length!=1)
thrownewRuntimeexception("syntax:javachatclient");
chatclientclient=newchatclient(args[0]);
}
}
篇二:Rtsp播放器直播与点播技术实现
多路Rtsp播放器直播与点播技术实现
多路Rtsp高清视频播放器下载地址:
/u011352914/article/details/169 19535
多路Rtsp播放器源码下载地址:
/detail/u011352914/6603251多路Rtsp播放器sdk说明下载地址:
/detail/u011352914/6603271
1.综述
Rtsp协议定义了一对多应用程序如何有效地通过ip网络传送多媒体数据,在体系结构上位于Rtp和Rtcp之上,
它使用tcp或Rtp完成数据传输。
目前在流媒体传输技术中使用最多的就是基于Rtsp/Rtp的流媒体传输,在智能网络摄像机上也需要实现基于Rtsp/Rtp的h.264实时流的传输。
Rtsp协议基于tcp完成Rtsp请求报文和响应报文的传输,Rtp协议基于udp协议完成流媒体数据的实时传输,Rtcp 协议基于udp协议提供客户端和服务器有关当前网络拥塞和以及实时流传输质量等信息。
2.架构设计
本文研究的流媒体播放器主要用来对遵循Rtsp标准协议的码流以及aVi文件进行实时播放以及码流录制。
播放器核心为两个dll,分别为网络dll以及播放dll。
网络库基于live555开发,主要对码流的获取以及链路的管理进行控制;播放库基于ffmpeg以及directx开发,主要对实时码流以及本地的音视频的文件进行解码播放和控制。
该Rtsp播放器实现了主流Rtsp播放器的基本功能,并有所拓展:
(1)Rtsp标准码流(包括音视频)的实时预览播放;
(2)网络数据流的断线重连;
(3)对存储文件的解码播放以及控制;
(4)音视频码流的同步存储,文件存储时以当前系统的时间戳作为音视频播放时的索引,方便在文件播放时以时间戳作为检索条件来点播文件;
(5)视频播放格式上支持h.264、mpeg4、mpeg2等,音频播放格式上支持aac、amR、g711等;
(6)视频抓拍;
(7)视频显示角度旋转;
(8)画面填充控制显示比例。
3.程序框架
播放器整体设计参考Vlc,mplayeR等知名播放器,将整个数据的处理流程分为:input、demux、decode、output 四个过程。
其中input用来处理网络数据流的输入以及文件数据的读取;demux用来做数据流的解复用,将音频以及视频数据分离成es流;decode用来解码视频以及音频es流,并输出解码后的数据(视频为yuV数据,音频为pcm格式);output用来处理yuV视频数据的显示以及pcm音频数据的输出。
为支持多路媒体数据并行解码输出,对于每路媒体数据分别设计了相应的engine引擎机制来进行管理,具体实现方案如下:
(1)为实现多种输入方式的扩展性,将input、demux、decode、output
四个过程划分为两个库来实现,分别为数据源解析库sourcesdk、
播放库playsdk;
(2)sourcesdk的管理功能由sourceengine引擎来完成,主要对input
以及demux模块进行封装管理。
sourceengine从数据源(直播、点
播、文件)获取数据,并解析数据将数据源分离成音频es流和视频
es流,并将解析的数据以私有格式进行封装,通过回调函数的机制
传递给应用层;
(3)playsdk的管理功能由playengine引擎来完成,主要对decode以
及output模块进行封装管理。
playengine提供了数据输入接口,通
过该接口可以将从sourceengine得到的数据传入该接口,放入
playengine缓存。
playengine从缓存中提取数据,并对数据按协议
格式进行解析,将解析出的音视频数据分别回调;
(4)为方便engine对各模块的管理以及数据通讯,在内部设计了消息机
制,可以通过engine给模块发送消息控制各模块的正常运行;
(5)在相互作用的模块之间,如decode与output之
间采用高效的数据缓
冲池机制来保证高效的内存分配,并通过队列机制将数据进行有效的
传递;
对于媒体数据大体处理流程图如下:
4.主要技术
播放器在功能和性能上具有较高的要求,具体的实现上,需要主要解决的关键技术点主要包括有:多路高清解码、兼顾低时延与流畅性、音视频同步以及浏览器扩展。
针对以上问题,实现上采用的相应解决办法如下:
4.1多路高清解码
多路高清解码播放每路都由多个线程配合来完成整个
数据的处理流程,在多路播放的情况下则更为复杂。
因此需要在系统的实现上具有高效的多线程管理机制,以及对各模块的组织、内部互联互通上做出良好的设计:
(1)通过sourcesdk、playsdk的实现,将繁琐的数据处理流程统一成了
标准的数据接口,控制管理上方便有效;
(2)在sourcesdk、playsdk内部实现上通过engine
机制,对单路数据
以及播放的管理提供了统一接口,对于多路播放实际上
只需要管理多
个engine即可;
4.2低时延与流畅
在性能提高上通过减少对内存数据的拷贝以及额外的
内存分配开销:
(1)在playsdk中设计了回环数据缓冲机制,对应用层输入的数据进行
高效的缓存,在传输decode模块时,避免了数据拷贝;
(2)在数据解码中使用了ffmpeg的directbuffer机制,进一步的避免了数
据的拷贝动作;
(3)数据再各模块之间传递时使用数据缓冲池,避免了额外的内存分配操
作,同时也减少了因内存分配操作而带来的内存碎片;
在低时延与流畅的平衡性上,通过设置最大缓冲帧数和最小缓冲帧数来实现控制,具体实现策略为:
通过比较待解码缓冲区和解码后还未来得及显示的缓
冲区里数据包的个数的和值,如果该值大于最大缓冲帧数,说明有很多数据在缓存里,延迟大了,这时就要加快显示速度(减小output模块的休眠时间),最大缓冲帧数就是影响延迟的;反之一样,最小缓冲帧数就是流畅的保证,该值越大就越流畅;通过改变这个最大值最小值就可以平衡延迟与
流畅。
4.3音视频同步
由于声音对时间的敏感性,所以在同步的处理上,系统以声音作为基准来参考,对视频的输出来进行调整,从而保证音视频的同步性,具体实现为:
通过比较音频和视频的时间戳(pts)来对视频的显示
速度进行调整,如当前的视频的pts比音频pts大于最小偏差值(目前设置为200ms),说明视频快了,就放慢是视频的显示速度;反之就加快视频的显示速度;但是,如果差距太大(目前设置为1000ms),大于最大偏差值时,加快视频的
显示速度的效果不
明显就采用丢帧方式,这个一般出现再刚开启的是时候。
4.4web浏览器调用
针对不同的浏览器需要来制作成不同的插件,即需要根据具体浏览器的插件接口来编写,可以根据相应的项目需求开发开发支持响应浏览器的插件,一般性需求主要是ie浏
览器ocx控件。
5.效果示例
Rtsp直播与点播:多路视频并发实时预览,窗口布局可动态调整;可动态的设置视频输出的显示比例,调整音量的输出大小;支持对视频内容的时间点检索等操作。
(版权所有,转载请注明作者和出处)
篇三:Vlc测试组播使用说明
Vlc组播软件使用说明
一.安装
1.Vlc播放器是一款开源播放器,可以播放mpeg-1,mpeg-2,divx,dVd/Vcd,ts,数字卫星频道,在许多作业平台底下透过宽频ipv4,ipv6网络播放线上影片,用于播放网络串流及本机多媒体档案播放
2.Vlc安装
首先点击安装包安装(网上可提供免费下载,以2.0.1版本为例)
双击安装
点击“下一步”
点击“下一步”
这里选择安装路径,点击“安装”
在安装过程中会弹出dos窗口,等待安装完毕后如下图所示
点击完成后,桌面会显示快捷方式,这样Vlc就安装完毕了
二.建立组播流量测试
1.服务器端配置
首先打开Vlc视频软件,点击“媒体”——“流”
选择“添加”——需要播放的视频
点击“串流”
点击“下一个”
这里不勾选“激活转码”,可勾选“在本地显示”,在这里作为服务器支持三种
组播方式播放
http
Rtp/mpegtransportstream
udp(legacy)
选择相应组播模式后,点击“添加”(这里以
Rtp/mpegtransportstream为例)
输入组播地址及端口号,例如这里输入的“234.0.0.6”端口号为“5004”填写完毕后直接点击“串流”,服务器配置完毕。