Java实现视频直播推流服务,前端使用flv.js播放问题

使用ffmpeg将rtsp协议的视频流转换为flv视频流通过netty websocket服务推送给前端页面,前端通过flvjs播放。

  • 存在问题,第一个订阅的前端可以正常播放,后加入的前端订阅者无法播放。
  • 请问有没有朋友遇到过这个问题,我大概猜测有两个可能:

    1. ffmpeg 转码后的第一段流是不是有特殊标识供播放器识别,所以后加入的订阅没有这个段流
    2. netty的websocket通过bytebuf推送流的时候是否是有什么我没有注意到的问题
  • 推送的代码

    ChannelGroup channels = new DefaultChannelGroup(ImmediateEventExecutor.INSTANCE);
     try {
                  ByteBuf buf = Unpooled.buffer(bufferSize);
                  while (!Thread.currentThread().isInterrupted() && buf.writeBytes(stream, bufferSize) > 0) {
                      channels.writeAndFlush(buf);
                      buf = Unpooled.buffer(bufferSize);
                  }
              } catch (IOException ignored) {
              }
  • Netty的二进制消息Encoder

    public class BinaryWebSocketFrameEncoder extends MessageToMessageEncoder<ByteBuf> {
    
      @Override
      protected void encode(ChannelHandlerContext context, ByteBuf message, List<Object> out) throws Exception {
          BinaryWebSocketFrame frame = new BinaryWebSocketFrame(message.retain());
          out.add(frame);
      }
    
    }
阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题