java - RED5 AXIS 相机捕捉和流媒体

标签 java red5

我想要捕获 AXIS 摄像机并对其进行流式传输。我对 RED5 还很陌生。我收到以下错误:

Exception in thread "main" java.lang.NullPointerException at org.vikulin.rtmp.publisher.Publisher2.packetReceived(Publisher2.java:23) at org.red5.server.presentation.output.flv.FLVStream.dispatchEvent(FLVStream.java:243) at org.red5.server.presentation.output.flv.FLVStream.sendAVCDecoderConfig(FLVStream.java:162) at org.red5.server.presentation.output.flv.FLVStream.addEvent(FLVStream.java:76) at org.red5.server.presentation.MediaPresentation.onMediaEvent(MediaPresentation.java:43) at org.red5.server.presentation.input.avp.codecs.H264.addPacket(H264.java:206) at org.red5.server.presentation.RTSPStream.onRTSPEvent(RTSPStream.java:100) at org.red5.server.net.rtsp.proxy.RtspTcp.setupAndPlay(RtspTcp.java:287) at org.red5.server.presentation.RTSPStream.onSDP(RTSPStream.java:138) at org.red5.server.net.rtsp.proxy.RtspTcp.parseDescription(RtspTcp.java:128) at org.red5.server.net.rtsp.proxy.RtspTcp.describe(RtspTcp.java:64) at org.red5.server.presentation.RTSPStream.startInput(RTSPStream.java:77) at org.red5.server.presentation.RTSPStream.start(RTSPStream.java:82) at org.vikulin.rtmp.publisher.Publisher2.main(Publisher2.java:49)

这是代码:

import java.io.IOException;
import org.red5.server.api.stream.IBroadcastStream;
import org.red5.server.api.stream.IStreamListener;
import org.red5.server.api.stream.IStreamPacket;
import org.red5.server.net.rtmp.event.VideoData;
import org.red5.server.presentation.RTSPStream;
import org.red5.server.stream.message.RTMPMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Publisher2 implements IStreamListener {

    PublishClient client;

    @Override
    public void packetReceived(IBroadcastStream arg0, IStreamPacket arg1) {
        System.out.println("" + arg1);
        VideoData data = new VideoData(arg1.getData());
        RTMPMessage message = RTMPMessage.build(data);
        try {
            client.pushMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException, InterruptedException {

        Logger log = LoggerFactory.getLogger(Publisher2.class);
        String publishName = "testb";
        String host = "127.0.0.1";
        int port = 1935;
        String app = "live";
        PublishClient client = new PublishClient();
        client.setHost(host);
        client.setPort(port);
        client.setApp(app);
        client.start(publishName, "live", null);
        while (client.getState() != PublishClient.PUBLISHED) {
            Thread.sleep(500);
        }

        Publisher2 test = new Publisher2();
        final RTSPStream camera = new RTSPStream("192.168.254.115", 554,
                "rtsp://192.168.254.115/axis-media/media.amp?videocodec=h264&videokeyframeinterval=30&fps=30");
        camera.addStreamListener(test);

        new Thread(new Runnable() {
            @Override
            public void run() {
                camera.start();
            }
        }).start();

        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        camera.stop();
        try {//wait for write out.
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        client.stop();
    }
}

如果您有任何想法,请帮助我!

最佳答案

您在 main 方法中声明了一个 client 变量,但在 packetReceived 方法中,您引用了类变量。此时类变量仍然为空。因此,可能会更改这一行:

PublishClient client = new PublishClient();

对此:

client = new PublishClient();

或者将客户端传递给您的方法,并从您的类中删除变量声明。

关于java - RED5 AXIS 相机捕捉和流媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196102/

相关文章:

java --list-modules 显示模块,但 jlink 找不到它

java - 如何处理过滤器中抛出的异常?

java - red5中的多线程

java - 在 Ivy 检索中忽略源 jar

apache-flex - 语音回声问题

java - 如何在 Install4j 中将 JCE 添加到 JRE 包

java - 如何使用谷歌 Oauth?我在使用 Android 时收到连接失败错误

javascript - 如何将 Javascript 客户端连接到 Red5 服务器?

java - 创建灵活的聊天和视频服务器

java - 以字节为单位的字符串无法转换为等效的字符串