使用 Java 进行 RTSP 编程。如何阅读单零件框架?
RTSP Programming with Java. How to read single part frames?
为了好玩,我正在尝试使用 Java 实现 RTSP 服务器。
因为我对 RTSP 没有任何预先了解。
我先分析已经做好的源码
我在网上找到了那些代码。
Link :
http://nsl.cs.sfu.ca/teaching/09/820/streaming/Client.html
http://nsl.cs.sfu.ca/teaching/09/820/streaming/Server.html
http://nsl.cs.sfu.ca/teaching/09/820/streaming/VideoStream.html
http://nsl.cs.sfu.ca/teaching/09/820/streaming/RTPpacket.html
对于这个帖子,我有关于 VideoStream.java 的问题。
它有如下方法:
public int getnextframe(byte[] frame) throws Exception
{
int length = 0;
String length_string;
byte[] frame_length = new byte[5];
//read current frame length
fis.read(frame_length,0,5);
//transform frame_length to integer
length_string = new String(frame_length);
length = Integer.parseInt(length_string);
return(fis.read(frame,0,length));
}
如您所见,它将 byte[] 转换为 String 而不是 Integer。然而,根据我的经验,字符串会变成一个六边形字符串。所以我改变了……如下。
Integer.parseInt(length_string.trim(), 16);
有时看起来不错,但有时会出现数字格式异常。
当我打印 length_string
变量时,它在控制台中显示为 iso2a, vc1mp, 41��� ...
.
我不知道我在这里错过了什么。你能解释一下代码的用途吗?
length_string = new String(frame_length);
length = Integer.parseInt(length_string);
P.S
有没有人知道这些代码或其他不使用额外第三方库的示例的完整实现,这对我很有帮助。
我自己回答结束这个问题。
每种视频类型都有自己的数据结构。
在这种情况下,我将数据类型设置为 'MJPEG',但我加载了 'MPEG' 文件。
所以字节数组看起来很奇怪。
- 仅供参考,MJPEG 只是一组 jpeg。所以每一帧都是关键帧。
- 我之前处理过的其他类型,比如TS文件,有i帧和b帧。前者是关键帧,图像清晰。但是第二个看起来坏了,因为它不是关键帧。
为了好玩,我正在尝试使用 Java 实现 RTSP 服务器。
因为我对 RTSP 没有任何预先了解。 我先分析已经做好的源码
我在网上找到了那些代码。
Link :
http://nsl.cs.sfu.ca/teaching/09/820/streaming/Client.html http://nsl.cs.sfu.ca/teaching/09/820/streaming/Server.html http://nsl.cs.sfu.ca/teaching/09/820/streaming/VideoStream.html http://nsl.cs.sfu.ca/teaching/09/820/streaming/RTPpacket.html
对于这个帖子,我有关于 VideoStream.java 的问题。
它有如下方法:
public int getnextframe(byte[] frame) throws Exception
{
int length = 0;
String length_string;
byte[] frame_length = new byte[5];
//read current frame length
fis.read(frame_length,0,5);
//transform frame_length to integer
length_string = new String(frame_length);
length = Integer.parseInt(length_string);
return(fis.read(frame,0,length));
}
如您所见,它将 byte[] 转换为 String 而不是 Integer。然而,根据我的经验,字符串会变成一个六边形字符串。所以我改变了……如下。
Integer.parseInt(length_string.trim(), 16);
有时看起来不错,但有时会出现数字格式异常。
当我打印 length_string
变量时,它在控制台中显示为 iso2a, vc1mp, 41��� ...
.
我不知道我在这里错过了什么。你能解释一下代码的用途吗?
length_string = new String(frame_length);
length = Integer.parseInt(length_string);
P.S
有没有人知道这些代码或其他不使用额外第三方库的示例的完整实现,这对我很有帮助。
我自己回答结束这个问题。
每种视频类型都有自己的数据结构。
在这种情况下,我将数据类型设置为 'MJPEG',但我加载了 'MPEG' 文件。
所以字节数组看起来很奇怪。
- 仅供参考,MJPEG 只是一组 jpeg。所以每一帧都是关键帧。
- 我之前处理过的其他类型,比如TS文件,有i帧和b帧。前者是关键帧,图像清晰。但是第二个看起来坏了,因为它不是关键帧。