文档章节

使用ffmpeg命令实现本地摄像头的远程访问——非编程纯命令

zhangyujsj
 zhangyujsj
发布于 2015/04/26 22:25
字数 1313
阅读 6693
收藏 133

1 ffserver命令

fserver是一个音频和视频的流式服务器。它通过在启动时读入的配置文件完成配置,不指定时用默认的/etc/ffserver.conf文件。ffserver接受一些或者FFM流作为输入然后通过RTP/RTSP/HTTP推流。ffserver监听在配置文件中指定的端口,在配置文件中输入的流叫做feed,每一个都是用<Feed>的节来指定的。每一个feed可以有不同格式的的不同输出流,每一个在配置文件中用<Stream>节来指定。ffserver是通过推送用ffmpeg编码的流来工作的。ffserver担当一个HTTPserver的角色,接收来自ffmpeg的获得发布流的POST请求,并且用流媒体内容来服务HTTP/RTSP客户端的GET请求。要搞清楚什么是feed,什么是stream。

1.1 Feed是什么

feed是由ffmpeg创建的FFM流,并且发送到ffserver正在监听的端口上。每一个feed是通过一个唯一的名字来识别的,这个名字关联到发布在ffserver上的资源的名字,并且是通过配置文件里面的<Feed>节来完成配置的。feed发布的URL是以下面的形式给出的:

 http://<ffserver_ip_address>:<http_port>/<feed_name>

其中,ffserver_ip_address是ffserver安装的主机的IP地址,http_port是HTTP服务器的端口号,feed_name是相关的定义在配置文件中的feed的名字。每一个feed跟一个磁盘上的文件相关联,这个文件用于当新内容被实时地加入进流的时候,这个文件是用于允许发送预先录制的数据尽可能快地到一个播放器。

1.2 stream是什么

一个实时流或者一个流是一个由ffserver发布的资源并且通过HTTP协议使客户可以访问。一个流可以连接到一个feed上,或者一个文件上。当连接到一个feed上的时候,发布的流是推的来自相关联的通过运行的ffmpeg的实例所形成的feed上的。在第二种情况中,流是从pre-recorded文件里读来的。每一个流有一个唯一的名字,关联到ffserver上的资源的名字,并且是通过配置文件中的复杂的stream节来配置的。访问流的HTTP地址形式:

 http://<ffserver_ip_address>:<http_port>/<stream_name>[<options>]

访问流的RTSP地址形式如下:

 http://<ffserver_ip_address>:<http_port>/<stream_name>[<options>]

其中,stream_name是配置文件中定义的流的名字,options是在URL后面指定的选项的列表,将影响流如何通过ffserver提供的方式。

2 ffmpeg命令

ffmpeg是一个可以从现场的音视频源中采集的非常快速的视频和音频转换器。可以在任意的采样率之间转换,并且可以在现场resize视频。ffmpeg用-i参数从任意数量的输入files中读入,并写入任意数量的输出文件(通过普通的输出文件名指定)。从输入中选择哪个流到输出流是自动完成或者用-map选项指定。为了引用选项中的输入文件,必须用索引号。类似地,文件里的流也是通过索引号引用的。如2:3引用第3个输入文件中的第4个流。一般的规则是选项是用在下一个指定的文件上的,因此,顺序是很重要的。每出现一个将运用到下一个输入或者输出文件上。这个规则的例外是最开始就指定的全局选项。

不要混淆输入和输出文件,首先指定完所有的输入文件,然后才指定输出文件。也不要混淆属于不同的文件的选项,所有选项仅仅运用在下一个输入或输出文件上,并且在不同的文件之间会重置。

下面来3个实例:

a 设置输出文件的视频码率为64kbps

ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi

b 强制输出文件的帧率为24fps:

ffmpeg -i input.avi -r 24 output.avi

c 强制输入文件的帧率为1fps并且输出文件的帧率为24fps

ffmpeg -r 1 -i input.avi -r 24 output.avi

原始输入文件需要格式化选项。

ffmpeg调用libavformat(包含解封装)读入输入文件并从中取得包含了编码数据的包。当有多个输入文件,ffmpeg通过跟踪最低的时间戳或者跟踪任何激活的输入流来保持同步。编码的包然后传递给解码器(除非指定是拷贝流,那么就不经过解码以及后面的编码)。解码器产生可以被filtering进一步处理的非压缩帧,在filtering之后,帧传给encoder(编码他们并且输出编码包),最后,传给封装器muxer,把编码包写给输出文件。在编码之前ffmpeg可以用libavfilter库中的滤波器来处理原始音视频帧。滤波器链产生了滤波器图,ffmpeg有两种类型的滤波器图:简单的和复杂的。

               

© 著作权归作者所有

zhangyujsj
粉丝 24
博文 358
码字总数 224241
作品 0
广州
私信 提问
加载中

评论(1)

韦浩宇
韦浩宇
很不错
ffmpeg(软)编码推流 - Android

-- ffmpeg推流:用到了ffmpeg库,以及编码视频的x264,编码音频的fdk-aac,推流使用的rtmp等 acc:RTMP的音频格式;flv: RTMP的视频格式; -- 视频流中的几个参数: public static final in...

desaco
2018/10/14
0
0
Centos7安装ffmpeg和使用youtube-dl下载Youtube视频

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。称之为音视频处理的神器都不过分。国内的暴风影音、QQ影音和格式工厂等等,都是FFMPEG换个马甲。国外的开...

Linux就该这么学
02/02
215
0
FFmpeg详解及常用命令使用

FFMPEG简介 FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,提供了录制、转换以及流化音视频的完整解决方案。...

qq_1196581964
2018/11/25
0
0
ffmpeg常用基本命令(转)

ffmpeg常用基本命令(转) 【FFmpeg】FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i inputfile -vcodec copy -an outputfile_video  //分离视频流ffmpeg -i inputfile -acodec copy -vn ou......

ffredy
2015/08/11
8.2K
1
如何调用一个ffmpeg进程处理多个输入流

我现在在弄一个Red5的直播功能,需要把摄像头的rtsp地址推送到Red5。现在使用下面的命令已经实现了: ffmpeg -threads 2 -i "rtsp://192.168.1.134:8554/1" -pass 2 -q:v 5 -vcodec copy -ar ...

ailth
2014/10/14
4.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
6
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部