vlc的流输出功能

JasonKwok JasonKwok     2022-09-09     413

关键词:

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

 

io中需要flush()刷新的流

只有输出流才需要flush()刷新,输入流都没有flush()方法为什么没有输入流,因为所有输入流都没flush()方法。flush()方法是定义在OutputStream和Writer这两个输出流的超类里面的方法,这是因为flush方法的作用和功能是向外做输出,将... 查看详情

vlc的使用

...系统是可以使用vlc的。而且在vlc的菜单上可以选择音频的输出是耳机孔还是hdmi(需要接上有hdmi接口的电视机) 查看详情

什么是支持的流数据源来持久化结果?

】什么是支持的流数据源来持久化结果?【英文标题】:Whatisasupportedstreamingdatasourcetopersistresult?【发布时间】:2016-06-2910:44:37【问题描述】:我正在尝试将新的流式写入功能与spark2.0.1-SNAPSHOT一起使用。实际上支持哪个输出数据... 查看详情

Keras 中预测的流输出

】Keras中预测的流输出【英文标题】:StreamOutputofPredictionsinKeras【发布时间】:2016-10-3101:54:09【问题描述】:我在Keras中有一个LSTM,我正在训练它来预测时间序列数据。我希望网络在每个时间步上输出预测,因为它将每15秒接收一... 查看详情

带有 azure 函数输出的流分析,错误写入批次

】带有azure函数输出的流分析,错误写入批次【英文标题】:Streamanalyticswithazurefunctionoutput,errorwritingbatches【发布时间】:2018-10-1512:12:32【问题描述】:我得到了一个流分析输出到Azure函数的设置,这部分工作。在LogAnalytics中,我... 查看详情

java流的分类都有哪些?

...一个特定的数据源读写数据。处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。看到左上角那个头像没,点一下这里有一群讨论问题的朋友;参考技术A按流向分:输入流:... 查看详情

Data Lake Store 的流分析可能的输出路径前缀

】DataLakeStore的流分析可能的输出路径前缀【英文标题】:StreamAnalyticspossibleoutputpathprefixforDataLakeStore【发布时间】:2017-05-3120:38:56【问题描述】:有没有办法在流分析作业中设置输出路径前缀,将数据存储到DataLakeStore以将其存储... 查看详情

让vlc也拥有斷點播放功能

如何让VLC也拥有记忆功能,记住上次播放位置.以下都是在Windows系统下操作,其他方法/步骤下载libsrpos_plugin-0.5.win插件https://sourceforge.net/projects/vlcsrposplugin/?source=typ_redirect解压并把解压的文件复制到VLC的安装目录下的plugins目录下.如... 查看详情

在 VLC 播放器中播放 RTSP 流

...自定义写入的播放器。我无法在vlc媒体播放器中播放相同的流的问题。当我启动vlc媒体播放器并输入流详细信息时,我的服务器正在显示vlc发出的以下请求:OPTIONSrtsp://192.16 查看详情

vlc输出流程简介(代码片段)

...理流程还是比较复杂的,不过这次我们追踪一下视频输出部分的流程,大概熟悉一下大概框架。正文视频输出模块还是比较复杂的,但是功能基本做到了自制,虽说包含了大量的时间校准以及修正的问题,但... 查看详情

理解java之io流

...,它代表了数据的无结构化传递。用来进行输入输出操作的流就称为IO流。IO流结构流的分类方式按流向分:从文件/网络/内存等(数据源)到程序是输入流从程序到文件/网络/内存等(数据源)是输出流按数据处理单位分字节流:以字... 查看详情

输出流

...)如何使用//1.创建一个数据输出流/*第一个参数:二进制的流数据要写入到哪里第二个参数:采用什么样的方式写入流数据,如果YES则表示追加,如果是NO则表示覆盖*/NSOutputStream*stream=[NSOutputStreamoutputStreamToFileAtPath:fullPathappend:YES... 查看详情

java基础javaio详解(代码片段)

...程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或者是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据... 查看详情

vlc-android-sdk - 无法查看 RTSP 实时视频

...4数据包,并且要查看我们应该连接到rtsp://1.2.3.4:5555/stream的流所以我尝试 查看详情

i/o流

...也叫做读取数据,输出也叫做作写出数据。 根据数据的流向分为:输入流和输出流。输入流:把数据从其他设备上读取到内存中的流。输出流:把数据从内存中写出到其他设备上的流。根据数据的类型分为:字节流和字符流... 查看详情

directx11withwindowssdk--16利用几何着色器可选的流输出阶段帮助绘制多种分形(代码片段)

...要从几何着色器拿到输出的顶点。这里我们可以使用可选的流输出阶段来拿到顶点集合。注意:本章末尾有大量的GIF动图!DirectX11WithWindowsSDK完整目录Github项目源码流输出阶段现在我们知道GPU可以写入纹理(textures),例如深度/模板... 查看详情

java中的流

Java中对输入输出的操作是通过流的方式来进行的,通过把输入和输出封装在流对象中,提供丰富的API,我们可以轻松的完成输入和输出的操作。我们都知道数据在内存和硬盘上都是以字节的形式存放的,一个字节... 查看详情

anddroid使用vlc,录像截图功能,支持rtsprtmphttpsmb等等。流媒体,点播视频等等

上一篇写了ijkplayer的直播录像和截图功能,但是点播的时候录像不行,这里提别在写一个Demo,用的是VLC,实现直播或者视频点播,录像和截图!!!!包含视频格式和健壮性比ijklayer更好,... 查看详情