Java 将实时视频输入流发送到 Red5 媒体服务器

标签 java inputstream h.264 red5 rtmp

我有一个来自Java Socket 的InputStreamInputStream 是 H.264 视频直播流。我想将此视频 InputStream 发送到 red5 媒体服务器,以便其他客户端可以观看它。

我找到了这个例子

package com.ryong21.example.publisher;import java.io.File;
import java.io.IOException;
import java.util.Date;
import org.red5.server.messaging.IMessage;
import org.red5.server.stream.message.RTMPMessage;
import org.red5.server.stream.provider.FileProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

            Logger log = LoggerFactory.getLogger(Publisher.class);

            String publishName = "test";
            String localFile = "2.mp3";
            String host = "rtmpxn.91kge.com";
            int port = 1935;
            String app = "live";

            IMessage msg = null;
            int timestamp = 0;
            int lastTS = 0;

            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);
            }

            FileProvider fp = new FileProvider(new File(localFile));        

            Date begin = new Date();
            log.debug(begin.toString());

            while(true){
                    msg = fp.pullMessage(null);

                    if(msg == null){
                            log.debug("done!");
                            break;
                    }
                    timestamp = ((RTMPMessage)msg).getBody().getTimestamp();
                    Thread.sleep(timestamp - lastTS);
                    lastTS = timestamp;
                    client.pushMessage( msg);
            }      
            Date end = new Date();
            log.debug(end.toString());
            client.stop();
    }

}`

我的问题是如何将其与套接字输入流一起使用,而不是在 FileProvider 中使用文件。 InputStream 已采用 H.264 编码。

最佳答案

好吧,在深入研究视频流之后,我发现我首先必须将 InputStream 转换为容器格式文件。可能的容器格式为 .mp4 或 .flv

创建容器文件后,我现在可以将其发布到 red5 媒体服务器。

关于Java 将实时视频输入流发送到 Red5 媒体服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293979/

相关文章:

video - 是否可以动态更改视频编码器参数?

java - 使用 appcontext 从后台线程显示 AlertDialog

java - Java 中的 System.nanoTime() 对于相同的输入给出不同的运行时间

java - ImageIO什么时候应该停止从InputStream读取?

java - 在Java中将网页内容读入字符串的最佳方法是什么?

c# - 是否可以使用 Emgu CV 3.0 通过 rstp 协议(protocol)和 ffmpeg h264 打开实时流

Java Midi Sequencer 录制后不播放

java - Java 中 System.out.println() 的字符限制

java - 尝试从输入流检索文本时应用程序挂起

ios - iOS 上通过 RTMP 的 H264 视频流