rtmp推流 java_rtsp向rtmp推流

该Java程序利用FFmpegFrameGrabber从RTSP源获取视频流,并通过FFmpegFrameRecorder将其推送到RTMP服务器。程序设置了TCP传输以避免丢包,调整了输出分辨率、帧率和编解码器参数。
摘要由CSDN通过智能技术生成

packagecom.awifi.video.media.test;importorg.bytedeco.javacpp.avcodec;importorg.bytedeco.javacv.FFmpegFrameGrabber;importorg.bytedeco.javacv.FFmpegFrameRecorder;importorg.bytedeco.javacv.Frame;importorg.bytedeco.javacv.OpenCVFrameConverter;/*** 版权所有: 爱WiFi无线运营中心

* 创建日期: 2018/9/27 9:15

* 创建作者:hw

* 文件名称:mediaStream

* 版本: v1.0

* 功能: rtsp向rtmp推流

* 修改记录:*/

public classTestRTMPGrabberRecorder {static boolean exit = false;public static void main(String[] args) throwsException {

System.out.println("start...");

String rtmpPath= "rtmp://192.168.1.91:1935/hls/demo";//String rtmpPath = "udp://@192.168.1.110:1234";//String rtspPath = "rtmp://live.hkstv.hk.lxdns.com/live/hks";//香港收视//String rtspPath = "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov";

String rtspPath = "rtsp://admin:admin123@192.168.120.111:554";//String rtspPath = "C:\\Users\\Administrator\\Desktop\\test2.h264";//ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://admin:leeking123@192.168.1.64:554/h264/ch1/main/av_stream rtmp://casic207-pc1/live360p/ss1//ffmpeg -i rtsp://admin:123123@192.168.1.64:554/h264/ch1/main/av_stream -vcodec copy -acodec copy -f flv rtmp://casic207-pc1/live360p/ss1

int audioRecord =0; //0 = 不录制,1=录制

boolean saveVideo = false;

test(rtmpPath,rtspPath,audioRecord,saveVideo);

System.out.println("end...");

}public static void test(String rtmpPath,String rtspPath,int audioRecord,boolean saveVideo ) throwsException {//FrameGrabber grabber = FrameGrabber.createDefault(0);//本机摄像头 默认//使用rtsp的时候需要使用 FFmpegFrameGrabber,不能再用 FrameGrabber

int width = 640,height = 480;

FFmpegFrameGrabber grabber=FFmpegFrameGrabber.createDefault(rtspPath);//grabber.setOption("rtsp_transport", "tcp");//使用tcp的方式,不然会丢包很严重//一直报错的原因!!!就是因为是 2560 * 1440的太大了。。

grabber.setImageWidth(width);

grabber.setImageHeight(height);

System.out.println("grabber start");

grabber.start();//FrameRecorder recorder = FrameRecorder.createDefault(rtmpPath, 640,480,0);//流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)

FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(rtmpPath, 1280, 720,audioRecord);

recorder.setInterleaved(true);

recorder.setVideoOption("crf","28");

recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);//28

recorder.setFormat("flv"); //rtmp的类型

recorder.setFrameRate(25);

recorder.setPixelFormat(0); //yuv420p

System.out.println("recorder start");

recorder.start();// OpenCVFrameConverter.ToIplImage conveter = newOpenCVFrameConverter.ToIplImage();

System.out.println("all start!!");int count = 0;while(!exit){

count++;

Frame frame=grabber.grabImage();if(frame == null){continue;

}if(count % 100 == 0){

System.out.println("count="+count);

}

recorder.record(frame);

}

grabber.stop();

grabber.release();

recorder.stop();

recorder.release();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android可以通过使用RTSP(Real-Time Streaming Protocol)拉取音视频流,以实现实时播放。RTSP是一种用于互联网上会话层(application layer)的协议,可以支持实时流媒体播放和控制。在Android中,可以使用MediaCodec和MediaExtractor等API来解码和播放RTSP流。首先,需要创建一个RTSP的URL,以指定要拉取的音视频资源的位置和格式。然后,可以使用MediaPlayer类或ExoPlayer库来创建一个播放器对象,将RTSP URL传递给播放器,然后开始播放。播放器会自动处理RTSP流的解码和渲染。 另一方面,Android也可以通过RTMP(Real-Time Messaging Protocol)推送音视频流至服务器。RTMP是一种用于实现实时通信的协议,常用于实时流媒体的发布和交互。要在Android中实现RTMP推流,可以使用第三方库,如libRtmp或LFLiveKit。首先,需要创建一个RTMP推流URL,以指定要推送的服务器和流的名称。然后,可以使用库提供的API,将音视频数据发送到服务器。可以使用Camera API或MediaCodec API来获取音视频数据,并将其编码为RTMP可接受的格式,然后通过网络发送。服务器将接收到的数据进行处理和分发,以实现实时流媒体播放或与其他用户进行交互。 总而言之,Android可以通过使用RTSP拉取音视频流,以实现实时播放,并可以通过RTMP推送音视频流至服务器,实现实时的流媒体发布和交互。这种功能在许多应用程序(例如视频播放器、实时直播、视频会议等)中都会用到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值