同时在Facebook和YouTube上同时实时流视频



我想制作可以使用其API直接将实时视频传输到Facebook和YouTube的Android应用程序。我已经在两者上进行了实时视频(一次(。但是我想将实时视频流到手机摄像机的同时。我将此库用作RTMP Publisher -https://github.com/pedrosg94/rtmp-rtsps-cleam-client-java。我尝试使用多个对象,但它不使用。

我是rtmp-rtsp-stream-client-java开发人员。

如果要将重复的流发送到其他服务器,则只需要重复的srsflvmuxer或rtspClient取决于您的流类型。例如,如果您使用的是RTMPCAMERA1,则需要修改此类,该类看起来像:

public class RtmpCamera1 extends Camera1Base {
  private SrsFlvMuxer srsFlvMuxer;
  private SrsFlvMuxer srsFlvMuxer2;
  public RtmpCamera1(SurfaceView surfaceView, ConnectCheckerRtmp connectChecker) {
    super(surfaceView);
    srsFlvMuxer = new SrsFlvMuxer(connectChecker);
    srsFlvMuxer2 = new SrsFlvMuxer(connectChecker);
  }
  public RtmpCamera1(TextureView textureView, ConnectCheckerRtmp connectChecker) {
    super(textureView);
    srsFlvMuxer = new SrsFlvMuxer(connectChecker);
    srsFlvMuxer2 = new SrsFlvMuxer(connectChecker);
  }
  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
  public RtmpCamera1(OpenGlView openGlView, ConnectCheckerRtmp connectChecker) {
    super(openGlView);
    srsFlvMuxer = new SrsFlvMuxer(connectChecker);
    srsFlvMuxer2 = new SrsFlvMuxer(connectChecker);
  }
  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
  public RtmpCamera1(LightOpenGlView lightOpenGlView, ConnectCheckerRtmp connectChecker) {
    super(lightOpenGlView);
    srsFlvMuxer = new SrsFlvMuxer(connectChecker);
    srsFlvMuxer2 = new SrsFlvMuxer(connectChecker);
  }
  /**
   * H264 profile.
   *
   * @param profileIop Could be ProfileIop.BASELINE or ProfileIop.CONSTRAINED
   */
  public void setProfileIop(byte profileIop) {
    srsFlvMuxer.setProfileIop(profileIop);
    srsFlvMuxer2.setProfileIop(profileIop);
  }
  @Override
  public void setAuthorization(String user, String password) {
    srsFlvMuxer.setAuthorization(user, password);
    srsFlvMuxer2.setAuthorization(user, password);
  }
  @Override
  protected void prepareAudioRtp(boolean isStereo, int sampleRate) {
    srsFlvMuxer.setIsStereo(isStereo);
    srsFlvMuxer.setSampleRate(sampleRate);
    srsFlvMuxer2.setIsStereo(isStereo);
    srsFlvMuxer2.setSampleRate(sampleRate);
  }
  @Override
  protected void startStreamRtp(String url) {
    if (videoEncoder.getRotation() == 90 || videoEncoder.getRotation() == 270) {
      srsFlvMuxer.setVideoResolution(videoEncoder.getHeight(), videoEncoder.getWidth());
      srsFlvMuxer2.setVideoResolution(videoEncoder.getHeight(), videoEncoder.getWidth());
    } else {
      srsFlvMuxer.setVideoResolution(videoEncoder.getWidth(), videoEncoder.getHeight());
      srsFlvMuxer2.setVideoResolution(videoEncoder.getWidth(), videoEncoder.getHeight());
    }
    srsFlvMuxer.start(url);
    //second url stream. For now hardcoded, modify this method to set in startStream library method.
    srsFlvMuxer2.start("rtmp://x.rtmp.youtube.com/xxxxxxxxx");   
  }
  @Override
  protected void stopStreamRtp() {
    srsFlvMuxer.stop();
    srsFlvMuxer2.stop();
  }
  @Override
  protected void getAacDataRtp(ByteBuffer aacBuffer, MediaCodec.BufferInfo info) {
    srsFlvMuxer.sendAudio(aacBuffer.duplicate(), info); //duplicate because you will reuse it on the second srsFlvMuxer.
    srsFlvMuxer2.sendAudio(aacBuffer, info);
  }
  @Override
  protected void onSPSandPPSRtp(ByteBuffer sps, ByteBuffer pps) {
    srsFlvMuxer.setSpsPPs(sps.duplicate(), pps.duplicate());//duplicate because you will reuse it on the second srsFlvMuxer.
    srsFlvMuxer2.setSpsPPs(sps, pps);
  }
  @Override
  protected void getH264DataRtp(ByteBuffer h264Buffer, MediaCodec.BufferInfo info) {
    srsFlvMuxer.sendVideo(h264Buffer.duplicate(), info);//duplicate because you will reuse it on the second srsFlvMuxer.
    srsFlvMuxer2.sendVideo(h264Buffer, info);
  }
}

最新更新