vlc的流输出功能

流输出功能,可以将vlc读取到的流,输出到文件或者通过网络发送,客户端可以使用http、rtp、rtsp等协议访问,还可以进行转码等操作。

参考http://wiki.videolan.org/Documentation:Streaming_HowTo

流输出语法

  1. % vlc input_stream --sout "#module1{option1=parameter1{parameter-option1},option2=parameter2}:module2{option1=...,option2=...}:..."

也可以使用下面的语法

  1. % vlc input_stream --sout-module1-option1=... --sout-module1-option2=... --sout-module2-option1=... --sout-module2-option2=... ...

1.standard模块(std)

example:

vlc test.mp4 -vvv --loop --sout "#standard{access=http,mux=ts,dst=192.168.9.80:10086/stream}"

将文件使用http协议发送到网络,使用ts封装,客户端使用http://192.168.9.80:10086/stream访问

关于standard的必选项

access,输出的协议。file(保存到文件)、udp、http、https、mmsh(使用微软的mms协议,仅支持基于http的mms协议)

mux,输出复用器。支持ts、ps、mpeg1、ogg、asf、asfh、avi、mpjpeg

dst,输出目的地址,如果access=file,就是保存的文件路径及文件名

对于某些视频,使用上面示例中的命令参数时,vlc接收端只能听见音频,消息中显示的错误日志如下 :

ts error: MPEG-4 descriptor not found

  1. packetizer_mpeg4audio info: AAC channels: 2 samplerate: 44100
  2. avcodec info: obtained IDirect3DDeviceManager9
  3. avcodec info: DXVA2CreateVideoService Success!
  4. avcodec error: DxFindVideoServiceConversion failed

但是使用mux=asf后,却能够正常播放

vlc test.mp4 -vvv --loop --sout "#standard{access=http,mux=asf,dst=192.168.9.80:10086/stream}"

这个问题与mp4文件格式有关,待解决。

2.rtp模块

使用rtp协议发送数据,也支持rtsp

example:

1)生成sdp文件

  1. vlc.exe test.mp4 -vvv  --loop --sout "#rtp{dst=92.168.9.80,sdp=file:///E:/stream.sdp}"

启动rtp传输,该命令生成一个sdp的描述文件stream.sdp,将其copy到客户机上,就可以使用vlc进行播放了,dst指定客户端的ip。

2)使用rtsp进行传输

  1. vlc.exe test.mp4 -vvv  --loop --sout "#rtp{sdp=rtsp://192.168.9.80:10086/stream}"

客户端面直接使用rtsp://192.168.9.80:10086/stream即可访问

3.es模块

es模块可以从stream中分离出不同的elementary streams,保存为不同的文件或者发送到不同的目的地址。

example:

  1. vlc.exe test.mp4 -vvv --no-loop  --sout "#es{access=file, dst-video=e:/video_%d.%c, dst-audio=e:/audio_%d.%c}"

提取文件中的音视频,并保存到文件中。--no-loop表示不用循环,%d代表流的track号,%c表示 编码的FOURCC。

4.transcode模块

transcode模块用于转码, 也可以完成一些附加的功能re-scaling, deinterlacing, resampling,crop等,除了音视频外还可以处理字幕,叠加图片到视频

支持的编码格式参考:http://www.videolan.org/streaming-features.html

example:

按指定参数进行音视频转码,并保存为avi文件,后面级联standard模块完成文件保存功能

  1. vlc.exe test.mp4 -vvv --sout "#transcode{vcodec=h264, vb=300, venc=x264, fps=15, width=352, height=288, acodec=mp3, aenc=ffmpeg, samplerate=44100, threads=2}:standard{access=file,mux=avi,dst=e:/test.avi}

venc,指定视频编码器,支持ffmpeg、x264、theora,可以进一步指定编码的详细参数

aenc,指定音频编码器,支持ffmpeg、vorbis、speex

threads,指定编码时线程数据,多核时可以提高效率

5.duplicate模块

duplicate模块可以复制stream,以用于不同的chains。

example:

  1. vlc.exe test.mp4 -vvv --sout "#duplicate{dst=standard{access=file,mux=avi,dst=e:/test.avi}, dst=rtp{dst=192.168.9.80,name=stream,sdp=rtsp://192.168.9.80:10086/stream}, dst=display}"

通过dumplicate模块得到3个输出,保存为*.avi、发送到rtsp server、本地显示

dumplicate还有一个select选项,用于选择处理的stream

其它说明:

1.默认情况下,vlc只会处理第一个音频和视频流,可以使用--sout-all选项,处理所有的流

2.--no-sout-audio,--no-sout-video选项可以禁止输出音频或者视频

3.更多示例见http://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples

时间: 2024-12-10 21:12:14

vlc的流输出功能的相关文章

1.java.io包中定义了多个流类型来实现输入和输出功能,

1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B.字节流和字符流 C.节点流和处理流   D.File stream E.Pipe stream F.Random stream G.Filter stream

四、Shell输入、输出功能和字符颜色设置

一.Shell输入功能 1.键盘输入 方式一: [[email protected] four]# cat test.sh #!/bin/bash #-e 参数可以解析语句中的转义字符 echo -e "my name is user1\n my name is user2" #-n 参数可以让echo命令结尾不换行 echo -n "my name is user1\n my name is user2" echo #输出一个空行 #一个应用实例 echo -n

YUV422蓝屏显示输出功能辅助调试

YUV422有YUYV,YVYU,UYVY,VYUY四种,以下笔者就就以UYVY为例介绍一下数据构成.因为常常要跟视频输入打交道,所以YUV422这种常见的视频信号是常常碰到的.有时候我们调试一个模块输出YUV422,然后再显示出来.非常多时候,可能没法准确推断你那个模块是不是已经正常跑起来了,跑起来来的情况下,是不是真的有数据输出,有了数据输出后来的数据究竟对不正确. 带着这些疑问,当然有非常多对策,笔者就先把这个事情一分为二,以YUV422数据为界限分两部分,假设怀疑是模块没有输出YUV42

用一个MapReduce job实现去重,多目录输出功能

总结之前工作中遇到的一个问题. 背景: 运维用scribe从apache服务器推送过来的日志有重复记录,所以这边的ETL处理要去重,还有个需求是要按业务类型多目录输出,方便挂分区,后面的使用. 这两个需求单独处理都没有问题,但要在一个mapreduce里完成,需要一点技巧. 1.map输入数据,经过一系列处理,输出时: if(ttype.equals("other")){ file = (result.toString().hashCode() & 0x7FFFFFFF)%40

史上最简单的带流控功能的http server

s.py import time import SimpleHTTPServer import SocketServer BYTES_PER_SECOND=160*1024 class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): def do_GET(self): """Serve a GET request.""" f = self.send_head() i

Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系

测试方法采用了VDMA仅有MM2S通道, 内存中的图像帧是用MicroBlaze核写入的一个colorbar. VDMA的mhs部分如下, 因为我的输出用了Digilent的HDMI核,而这个HDMI核是32位的,我自己写了个axis_24_32的位宽转换的ip,这个暂且按下不表. BEGIN axi_vdma PARAMETER INSTANCE = axi_vdma_0 PARAMETER HW_VER = 5.04.a PARAMETER C_USE_FSYNC = 0 PARAMETER

struts2: 通过流输出实现exce导出l

参考下面代码,在Action中加一个方法: 1 // 导出excel 2 public String excel() throws Exception { 3 StringBuffer excelBuf = new StringBuffer(); 4 excelBuf.append("运单号").append("\t").append("始发站").append("\t").append("目的站").ap

javascript中输出信息的方法-信息确认框-提示输入框-文档流输出

js中输出信息的方法 1.文档流输出 document.write('hello'); 2.输出信息提示框 模态对话框 window.alert('要输出显示的内容');  或 alert('要输出显示的内容'); alert(n); 3.信息确认框 var f =  window.confirm('是否要进入新浪网');  confirm(""); if(f){ location.href = 'http://www.sina.com.cn'; } 4.提示输入框 window.pr

DirectX11 With Windows SDK--16 利用几何着色器可选的流输出阶段帮助绘制多种分形

前言 在上一章,我们知道了如何使用几何着色器来重新组装图元,比如从一个三角形分裂成三个三角形.但是为了实现更高阶的分形,我们必须要从几何着色器拿到输出的顶点.这里我们可以使用可选的流输出阶段来拿到顶点集合. 注意: 本章末尾有大量的GIF动图! DirectX11 With Windows SDK完整目录 Github项目源码 流输出阶段 现在我们知道GPU可以写入纹理(textures),例如深度/模板缓冲区以及后备缓冲区.当然,我们也可以通过渲染管线的流输出阶段让GPU将几何着色器输出的顶点