基于JMF RTP的网络传输媒体流(4)
时间:2011-02-27 zhangjunhd
1.4数据传输格式
在RTP传输中,如果还是用传统的AVI,MOV格式的话,将会增加服务器负荷,而且对网络要求特别高,因此需要将传统格式转化至易于传送,网络适应性好,抗丢包性能和抗误码性能好的编码格式。下表是JMF项目支持的视音频在RTP传送的压缩格式,也就是说经过定制后的输出视频流,还得进行一次转换,以便网络发送。
表 JMF支持的视音频在RTP传送中的格式
多媒体类别 |
RTP传输格式 |
音频 |
JAUDIO_G711_ULAW/rtp,dvi/rtp ,g723/rtp ,gsm/rtp |
视频 |
jpeg/rtp,h261/rtp,h263/rtp |
转化格式的关键代码及其分析(视频):
//从processor获得轨道控制器
TrackControl [] tracks = processor.getTrackControls();
//为每个轨道的格式进行转制
for (int i = 0; i < tracks.length; i++)
{
//此处省略获得轨道信息格式和支持格式代码
//下面一行为转制函数,需要参数为:轨道格式和轨道支持的格式
chosen = checkForVideoSizes(tracks[i].getFormat(), supported[0]);
//此处省略如果不能对轨道格式转变代码
}
//转制函数
/* 在传输视频信息时,对于JPEG编码格式,视频图像的宽和高是8像素的整数倍,对于
*H263编码格式,只支持三种图像的大小,即352X288,176X144,128X96像素,只要满
*足了这些条件,才可以正常传输视频信息,所以,需要对视频格式进行转制,
*不负荷条件的都需要转化,以满足正常传输。
*/
Format checkForVideoSizes(Format original, Format supported) {
int width, height;
Dimension size = ((VideoFormat)original).getSize();//获取视频图像的尺寸
Format jpegFmt = new Format(VideoFormat.JPEG_RTP);
Format h263Fmt = new Format(VideoFormat.H263_RTP);
if (supported.matches(jpegFmt)) {//如果是JPEG格式
//调整宽
width = (size.width % 8 == 0 ? size.width :(int)(size.width / 8) * 8);
//调整高
height = (size.height % 8 == 0 ? size.height :(int)(size.height / 8) * 8);
} else if (supported.matches(h263Fmt)) {//如果是H263格式
if (size.width < 128) {
width = 128;
height = 96;
} else if (size.width < 176) {
width = 176;
height = 144;
} else {
width = 352;
height = 288;
}
} else {
//对于其他格式不受理
return supported;
}
return (new VideoFormat(null,
new Dimension(width, height),
Format.NOT_SPECIFIED,
null,
Format.NOT_SPECIFIED)).intersects(supported);
基于JMF RTP的网络传输媒体流(5)
时间:2011-02-27 zhangjunhd
|