gpt4 book ai didi

java - 创建用于屏幕传输 RTSP 的处理器

转载 作者:行者123 更新时间:2023-11-30 05:05:01 25 4
gpt4 key购买 nike

我有下一个类,用于在Java中通过音频或视频文件传输RTP。

到目前为止一切顺利。

我想要的是修改UnicastRtp类来启用屏幕传输,也就是说,您可以使用这样的媒体定位器:

MediaLocator new ("screen://0,0,1280,800/25")

我在互联网上搜索了很多,认为解决方案是改变创建和配置处理器的方式。

为了传输屏幕内容,必须在StreamPantalla中支持和 DataSourcePantalla类。

我开发了一个程序,能够从屏幕的某个区域在播放器中显示内容(使用相同的 StreamPantallaDataSourcePantalla 类),所以我知道它们运行良好。

现在我需要改变 UnicastRtp类能够配置处理器来传输屏幕内容。

非常感谢任何帮助或线索。

非常感谢您的帮助。

您好!

最佳答案

这是我的解决方案:

MediaLocator ml=new MediaLocator("screen://0,0,1280,800/25");

DataSource clone=null;

try {
ds = new DataSourcePantalla();
ds.setLocator(ml);
clone = javax.media.Manager.createCloneableDataSource(ds);
} catch (Exception e) {
System.out.println(e.getMessage());
}

try {
ds.connect();
clone.connect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Format[] outputFormat=new Format[1];
FileTypeDescriptor outputType = new FileTypeDescriptor(FileTypeDescriptor.RAW_RTP);
outputFormat[0]=new VideoFormat(VideoFormat.JPEG_RTP);
ProcessorModel processorModel = new ProcessorModel(clone, outputFormat, outputType);

// Try to create a processor to handle the input media locator
try {
processor = Manager.createRealizedProcessor(processorModel);
} catch (NoProcessorException npe) {
System.out.println(npe.getMessage());
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
catch (CannotRealizeException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}

boolean result = waitForState(processor, Processor.Configured);
if (result == false){
System.out.println("Error, No se pudo configurar el processor en UnicastRtpPantalla::createMyProcessor");
return false;
}

TrackControl[] tracks = processor.getTrackControls();
// Search through the tracks for a video track
for (int i = 0; i < tracks.length; i++) {
Format format = tracks[i].getFormat();
if (tracks[i].isEnabled() && format instanceof VideoFormat) {
System.out.println("Pista "+i+" de video tiene formato: "+tracks[i].getFormat());
// Found a video track. Try to program it to output JPEG/RTP
// Make sure the sizes are multiple of 8's.
float frameRate = 25;//((VideoFormat) format).getFrameRate();
Dimension size = new Dimension(1280, 800);//((VideoFormat) format).getSize();
int w = (size.width % 8 == 0 ? size.width: (int) (size.width / 8) * 8);
int h = (size.height % 8 == 0 ? size.height: (int) (size.height / 8) * 8);
VideoFormat jpegFormat = new VideoFormat(VideoFormat.JPEG_RTP,
new Dimension(w, h), Format.NOT_SPECIFIED,
Format.byteArray, frameRate);
tracks[i].setFormat(jpegFormat);
System.out.println("Pista "+i+" de video se cambió a formato: "+tracks[i].getFormat());
} else
tracks[i].setEnabled(false);
}
// // Set the output content descriptor to RAW_RTP
ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
processor.setContentDescriptor(cd);

ds = processor.getDataOutput();

问候!

关于java - 创建用于屏幕传输 RTSP 的处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com