使用FFmpeg如何转发一个RTSP视频流
版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/6930221.html
ffmpeg -i rtsp://localhost/live -c copy -f flv rtmp://server/live/h264Stream
如果需要在Android设备上转发RTSP流,则需要用到JavaCV。相关介绍可以参考:JavaCV 初体验
核心逻辑如下:
long startTimestamp = 0;
FrameGrabber grabber = FFmpegFrameGrabber.createDefault(inputPath);
try {
grabber.start();
} catch (Exception e) {
try {
grabber.restart();
} catch (Exception e1) {
throw e;
}
}
OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
Frame grabframe = grabber.grab();
IplImage grabbedImage = null;
if (grabframe != null) {
Log.e(TAG, "has fetched first frame");
grabbedImage = converter.convert(grabframe);
} else {
Log.e(TAG, "not fetched first frame");
}
FrameRecorder recorder = FrameRecorder.createDefault(outputPath, 640, 360);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // avcodec.AV_CODEC_ID_H264
recorder.setFormat("flv");
recorder.setFrameRate(25);
recorder.setGopSize(10);try {
recorder.start();
} catch (FrameRecorder.Exception e) {
try {
Log.e(TAG, "recorder start failed, try to restart recorder...");
Log.e(TAG, "close recorder...");
recorder.stop(); // 停止录制器的执行状态
Log.e(TAG, "restart recorder...");
recorder.start(); // 开启录制器
} catch (FrameRecorder.Exception e1) {
throw e;
}
}
Log.e(TAG, "start push stream");
while ((grabframe = grabber.grab()) != null && push_stream) {
grabbedImage = converter.convert(grabframe);
Frame rotatedFrame = converter.convert(grabbedImage);
if (startTimestamp == 0) {
startTimestamp = System.currentTimeMillis();
}
recorder.setTimestamp(1000 * (System.currentTimeMillis() - startTimestamp));// 时间戳
if (rotatedFrame != null) {
recorder.record(rotatedFrame);
}
}
Log.e(TAG, "has stop push stream");
recorder.stop();
recorder.release();
grabber.stop();
最重要的两个对象为:FFmpegFrameGrabber 和 FrameRecorder,其中FFmpegFrameGrabber负责逐帧解码,FrameRecorder负责逐帧编码。
使用FFmpeg如何转发一个RTSP视频流的更多相关文章
- Web下无插件播放rtsp视频流的方案及各家优秀内容资源整理
Web下无插件播放rtsp视频流的方案及各家优秀内容资源整理 方案一:服务器端用 websocket 接受 rtsp ,然后,推送至客户端 实现步骤: 方案二:使用 ffmpeg + nginx 把 ...
- 【FFmpeg】ffplay播放rtsp视频流花屏问题
问题描述:ffplay播放rtsp视频流时,播放过程中随机出现花屏现象. 基本流程学习:阅读ffplay源码,熟悉其播放rtsp视频流的基本流程. 在ffplay源码阅读和分析的基础上,画出了其播放r ...
- 【FFmpeg】ffplay播放rtsp视频流花屏问题 (转)
问题描述:ffplay播放rtsp视频流时,播放过程中随机出现花屏现象. 基本流程学习:阅读ffplay源码,熟悉其播放rtsp视频流的基本流程. 在ffplay源码阅读和分析的基础上,画出了其播放r ...
- Onvif开发之服务端成功对接Rtsp视频流篇
前面篇介绍onvif服务端的发现功能,继续在之前的代码基础上完成一个RTSP流的工作,也就是客户端通过ONVIF协议来预览设备端在这个之前必须确定几个简单的条件1 设备端能被发现2 设备端支持RTSP ...
- OpenCV读取RTSP视频流
用opencv的VideoCapture读取RTSP视频流,只有opencv3.1版本可以,之前的版本都无法读取视频流.可能的原因是云平台的RTSP视频流太差,经常错码.项目最后使用的是opencv2 ...
- 谷歌浏览器Chrome播放rtsp视频流解决方案
找半天,HTML5的可以支持RTMP 但是无法播放RTSP,flash也止步于RTMP,最后同事推荐了个开源的好东东 VLC ,请教谷歌大神之后,这货果然可以用来让各浏览器(IE activex方式, ...
- FFmpeg实现监控摄像头的RTSP协议转RTMP协议直播
文章来源:http://www.cuplayer.com/player/PlayerCode/RTSP/2014/0706/1419.html FFmpeg实现监控摄像头的RTSP协议转RTMP协议直 ...
- ffmpeg处理rtmp/文件/rtsp的推流和拉流
ffmpeg处理rtmp/文件/rtsp的推流和拉流 本demo演示了利用ffmpeg从服务器拉流或本地文件读取流,更改流url或文件类型名称发送回服务器或存到本地的作用. 由于本程序只写了3个小 ...
- ffmpeg API录制rtsp视频流
原文出自http://blog.csdn.net/zxwangyun/article/details/8190638#reply 作者 Sloan 这里在录制时,并没有进行转码,只是相当于把rts ...
随机推荐
- ---perl 模块安装方法
http://blog.csdn.net/lincy100/article/details/7333794 $ perl -MCPAN -e shell install Log::Log4perlin ...
- mvc中view与controll之间传递参数时,可以使用url进行传递
mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...
- hitTest,UIWindow sendEvent ,touchbegan, 响应链
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/using_responders_and_th ...
- Python介绍与安装
Python 是一种面向对象的解释型程序设计语言,支持支持面向过程.函数式和面向对象编程.另外,Python可以在Windows.UNIX等多个操作系统上使用. 为什么学编程 编程是一种工具,可以实现 ...
- 将font-size设置为 12px 以下,Chrome浏览器只能显示12px怎么办?
将字体大小设置为12px以下,而Chrome浏览器依然只显示12px,因为 Chrome 这款任性的浏览器做了如下限制: 1. font-size 有一个最小值 12px(不同操作系统.不同语言可能限 ...
- [Shell]Bash变量:数值运算及运算符
------------------------------------------------------------------------------------------------- Sh ...
- MySQL误删数据
首先看下mysql误删数据排名最前的几种是: 1.误删文件 2.误删库.表 3.错误全表删除 / 更新 4.升级操作失误 都来看看你命中过几个,hoho. 简单说下我亲手造的一个大事故吧. 那大概是一 ...
- php面试题五之nginx如何调用php和php-fpm的作用和工作原理
nginx如何调用php 采用nginx+php作为webserver的架构模式,在现如今运用相当广泛.然而第一步需要实现的是如何让nginx正确的调用php.由于nginx调用php并不是如同调用一 ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum(欧拉筛)
题目来源:https://nanti.jisuanke.com/t/A1956 题意:找一个数拆成无平方因子的组合数,然后求前缀和. 解题思路:我们可以把某个数分解质因数,如果某个数可以分解出三个相同 ...
- shell脚本语法学习
以下内容仅为个人学习使用,如有错误,欢迎指出 持续更新............... 一.首先创建.sh文件,打开并在文件的第一行输入#!/bin/sh 执行shell文件命令为: . filenam ...