<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bernie Yu &#187; 录制</title>
	<atom:link href="http://bernieyu.com/tag/%e5%bd%95%e5%88%b6/feed/" rel="self" type="application/rss+xml" />
	<link>http://bernieyu.com</link>
	<description>复刻生活</description>
	<lastBuildDate>Tue, 17 May 2016 09:03:15 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>在Windows下搭建基于nginx的视频直播和点播系统</title>
		<link>http://bernieyu.com/2015/06/build-video-live-and-vod-with-nginx-rtmp-on-windows/</link>
		<comments>http://bernieyu.com/2015/06/build-video-live-and-vod-with-nginx-rtmp-on-windows/#comments</comments>
		<pubDate>Fri, 19 Jun 2015 09:00:27 +0000</pubDate>
		<dc:creator><![CDATA[Bernie Yu]]></dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[ffplay]]></category>
		<category><![CDATA[hls]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[rtmp]]></category>
		<category><![CDATA[yamdi]]></category>
		<category><![CDATA[录制]]></category>
		<category><![CDATA[直播]]></category>

		<guid isPermaLink="false">http://bernieyu.com/?p=234</guid>
		<description><![CDATA[一、软件准备 由于nginx原生是为linux服务的，因此官方并没有编译好的windows版本可以下载，要在w ... <a class="more-link" href="http://bernieyu.com/2015/06/build-video-live-and-vod-with-nginx-rtmp-on-windows/">　　>>阅读全文&#60;&#60;</a>]]></description>
				<content:encoded><![CDATA[<h2>一、软件准备</h2>
<p style="padding-left: 30px;">由于nginx原生是为linux服务的，因此官方并没有编译好的windows版本可以下载，要在windows上使用nginx，要么下载源码进行编译，要么使用其他人已经编译好的文件。</p>
<p style="padding-left: 30px;">而要让nginx支持视频直播和点播，还需要第三方的nginx模块：nginx-rtmp-module</p>
<p style="padding-left: 30px;">所幸，已经有大神做好了nginx的编译，而且集成了很多nginx模块，其中就已经包括了<a href="https://github.com/arut/nginx-rtmp-module">nginx-rtmp-module</a>。</p>
<p style="padding-left: 30px;">下载地址：<a href="http://nginx-win.ecsds.eu">http://nginx-win.ecsds.eu</a>/，详细说明可参见：<a href="http://nginx-win.ecsds.eu/download/Readme%20nginx-win%20version.txt">Readme nginx-win version.txt</a></p>
<p style="padding-left: 30px;">我下载的是<a href="http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip">nginx 1.7.11.3 Gryphon</a>这个版本。</p>
<p style="padding-left: 30px;">这个网站同时也提供了vcredist的下载（<a href="http://nginx-win.ecsds.eu/download/vcredist_x86.exe">x86</a>，<a href="http://nginx-win.ecsds.eu/download/vcredist_x64.exe">x64</a>），以避免运行nginx时出现缺少库的错误。</p>
<p style="padding-left: 30px;">另外还要下载<a href="https://github.com/arut/nginx-rtmp-module/blob/master/stat.xsl"> stat.xsl</a> 用于显示当前ngix-rtmp服务状态</p>
<p style="padding-left: 30px;">另外还需要下载ffmpeg、ffplay、yamdi：</p>
<p style="padding-left: 30px;">总结如下：</p>
<p style="padding-left: 30px;">1. <a href="http://nginx-win.ecsds.eu/download/nginx%201.7.11.3%20Gryphon.zip">nginx 1.7.11.3 Gryphon</a></p>
<p style="padding-left: 30px;">2. <a href="https://github.com/arut/nginx-rtmp-module/blob/master/stat.xsl">stat.xsl</a></p>
<p style="padding-left: 30px;">3. <a href="http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20150619-git-bb3703a-win32-static.7z">ffmpeg、ffplay</a></p>
<p style="padding-left: 30px;">4. <a href="http://sourceforge.net/projects/yamdi/files/latest/download?source=files">yamdi</a></p>
<h2>二、Nginx 配置</h2>
<p style="padding-left: 30px;"> 1. nginx配置</p>
<pre>worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

        application hls {
             live on;  #启用rtmp直播
                       #地址为rtmp://[server]:[rtmp_port]/[app]/[stream]
             hls on;   #启用hls直播
                       #地址为http://[server]:[http_port]/[app]/[stream].m3u8
                       #需要配合下面http段设置使用
             hls_path nginx-rtmp-module/tmp/app/;
             hls_fragment 5s;
             recorder rec {  #启用录制
               record all manual;  #手动控制录制启停
               record_suffix _rec.flv;
               record_path nginx-rtmp-module/tmp/rec/;  #录制保存地址
               record_unique on;
           }
       }
       application vod2{  #rtmp点播
       		play nginx-rtmp-module/tmp/rec/;    
       }
    }
}

http {
    server {
        listen      18080;

        location /stat {  #服务器状态
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root nginx-rtmp-module/;
        }

        location /control { #控制器
            rtmp_control all;
        }
        
	location /hls/ {  #hls直播地址
           #server hls fragments
           types{
             application/vnd.apple.mpegurl m3u8;
             video/mp2t ts;
           }
           alias nginx-rtmp-module/tmp/app/;
           expires -1;
        }

        location /vod/{  #hls点播地址
            alias nginx-rtmp-module/tmp/rec/;
        }

        location / {
            root nginx-rtmp-module/test/www/;
        }
    }
}
</pre>
<h2>三、测试</h2>
<p style="padding-left: 30px;">1. 启动nginx</p>
<pre>start nginx_1.7.11.3_Gryphon\nginx</pre>
<p style="padding-left: 30px;">2. 推送rtmp流到nginx-rtmp</p>
<pre>start ffmpeg\ffmpeg -re -i rtmp://live.hkstv.hk.lxdns.com/live/hks -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv rtmp://localhost:1935/hls/mystream -loglevel quiet</pre>
<p style="padding-left: 30px;">3. rtmp直播</p>
<pre>ffmpeg\ffplay "rtmp://127.0.0.1:1935/hls/mystream"
</pre>
<p style="padding-left: 30px;">4. hls 直播</p>
<pre>ffmpeg\ffplay "http://127.0.0.1:18080/hls/mystream.m3u8"</pre>
<p style="padding-left: 30px;">5. 开始录制</p>
<pre>http://127.0.0.1:18080/control/record/start?app=hls&amp;name=mystream&amp;rec=rec</pre>
<p style="padding-left: 30px;">6. 停止录制</p>
<pre>http://127.0.0.1:18080/control/record/stop?app=hls&amp;name=mystream&amp;rec=rec</pre>
<p style="padding-left: 30px;">7. 为rtmp点播文件添加索引，否则文件在播放时进度条不能拖动，假定刚才录制的文件名为mystream-1428384476_rec.flv</p>
<pre>yamdi\yamdi -i nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec.flv -o nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec_idx.flv</pre>
<p style="padding-left: 30px;">8. rtmp点播</p>
<pre>ffmpeg\ffplay "rtmp://127.0.0.1:1935/vod2/mystream-1428384476_rec_idx.flv"</pre>
<p style="padding-left: 30px;">9. 制作hls点播分片文件</p>
<pre>ffmpeg\ffmpeg -i E:\video-nginx\nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec.flv -acodec copy -bsf:a h264_mp4toannexb -g 105 -vcodec libx264 -vprofile baseline -bf 0 -bufsize 850k -bsf:v dump_extra -map 0 -f segment -segment_format mpegts -segment_list "E:\video-nginx\nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec\mystream-1428384476_rec.m3u8" -segment_time 10 E:\video-nginx\nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec\mystream-1428384476_rec-%d.ts</pre>
<p style="padding-left: 30px;">10. hls 点播</p>
<pre>ffplay "http://127.0.0.1:8080/vod/mystream-1428384476_rec/mystream-1428384476_rec.m3u8"</pre>
]]></content:encoded>
			<wfw:commentRss>http://bernieyu.com/2015/06/build-video-live-and-vod-with-nginx-rtmp-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转] FFmpeg获取DirectShow设备数据（摄像头，录屏）</title>
		<link>http://bernieyu.com/2015/04/ffmpeg-get-directshow-device-cam-screen-record/</link>
		<comments>http://bernieyu.com/2015/04/ffmpeg-get-directshow-device-cam-screen-record/#comments</comments>
		<pubDate>Tue, 07 Apr 2015 02:55:30 +0000</pubDate>
		<dc:creator><![CDATA[Bernie Yu]]></dc:creator>
				<category><![CDATA[IT技术]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[rtmp]]></category>
		<category><![CDATA[录制]]></category>
		<category><![CDATA[摄像头]]></category>

		<guid isPermaLink="false">http://bernieyu.com/?p=39</guid>
		<description><![CDATA[1. 列设备 ffmpeg -list_devices true -f dshow -i dummy 命令执行 ... <a class="more-link" href="http://bernieyu.com/2015/04/ffmpeg-get-directshow-device-cam-screen-record/">　　>>阅读全文&#60;&#60;</a>]]></description>
				<content:encoded><![CDATA[<p><strong>1. 列设备</strong></p>
<pre>ffmpeg -list_devices true -f dshow -i dummy
</pre>
<p>命令执行后输出的结果如下（注：中文的设备会出现乱码的情况）。列表显示设备的名称很重要，输入的时候都是使用“-f dshow -i video=&#8221;{设备名}&#8221;”的方式。</p>
<p><a href="http://bernieyu.com/wp-content/uploads/2015/04/1.jpg"><img class="alignnone size-full wp-image-43" src="http://bernieyu.com/wp-content/uploads/2015/04/1.jpg" alt="1" width="529" height="125" /></a></p>
<p>我自己的机器上列出了以下设备：</p>
<pre>[dshow @0388f5e0] DirectShow video devices  
[dshow @0388f5e0]  "Integrated Camera"  
[dshow @0388f5e0] "screen-capture-recorder"  
[dshow @0388f5e0] DirectShow audio devices  
[dshow @0388f5e0]  "鍐呰楹﹀厠椋?(Conexant20672 SmartAudi"  
[dshow @0388f5e0]  "virtual-audio-capturer"</pre>
<p>下文的测试中，使用其中的两个视频输入：&#8221;Integrated Camera&#8221;和&#8221;screen-capture-recorder&#8221;。</p>
<p>注：音频设备出现乱码，这个问题的解决方法会随后提到。</p>
<p>&nbsp;</p>
<h2><strong>2. 获取摄像头数据（保存为本地文件或者发送实时流）</strong></h2>
<h4></h4>
<h4><strong>2.1. 编码为H.264，保存为本地文件</strong></h4>
<p>下面这条命令，实现了从摄像头读取数据并编码为H.264，最后保存成mycamera.mkv。</p>
<pre>ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 mycamera.mkv</pre>
<h4></h4>
<h4> <strong>2.2. 直接播放摄像头的数据</strong></h4>
<p>使用ffplay可以直接播放摄像头的数据，命令如下：</p>
<pre>ffplay -f dshow -i video="Integrated Camera"</pre>
<p>如果设备名称正确的话，会直接打开本机的摄像头，如图所示。</p>
<p><a href="http://bernieyu.com/wp-content/uploads/2015/04/2.jpg"><img class="alignnone size-full wp-image-49" src="http://bernieyu.com/wp-content/uploads/2015/04/2.jpg" alt="2" width="428" height="338" /></a></p>
<p>注：除了使用DirectShow作为输入外，使用VFW也可以读取到摄像头的数据，例如下述命令可以播放摄像头数据：</p>
<pre>ffplay -f vfwcap -i 0</pre>
<p>此外，可以使用FFmpeg的list_options查看设备的选项：</p>
<pre>ffmpeg -list_options true -f dshow -i video="Integrated Camera"</pre>
<p>输出如下：</p>
<pre>[dshow @ 03845420] DirectShow video device options  
[dshow @ 03845420]  Pin "鎹曡幏"  
[dshow @ 03845420]   pixel_format=bgr24  min s=640x480 fps=15 max s=640x480 fps=30  
[dshow @ 03845420]   pixel_format=bgr24  min s=640x360 fps=15 max s=640x360 fps=30  
[dshow @ 03845420]   pixel_format=bgr24  min s=352x288 fps=15 max s=352x288 fps=30  
[dshow @ 03845420]   pixel_format=bgr24  min s=320x240 fps=15 max s=320x240 fps=30  
[dshow @ 03845420]   pixel_format=bgr24  min s=800x448 fps=1 max s=800x448 fps=15  
[dshow @ 03845420]   pixel_format=bgr24  min s=960x544 fps=1 max s=960x544 fps=10  
[dshow @ 03845420]   pixel_format=bgr24  min s=1280x720 fps=1 max s=1280x720 fps=10  
[dshow @ 03845420]   pixel_format=bgr24  min s=424x240 fps=15 max s=424x240 fps=30  
[dshow @ 03845420]   pixel_format=yuyv422  min s=640x480 fps=15 max s=640x480 fps=30  
[dshow @ 03845420]   pixel_format=yuyv422  min s=640x360 fps=15 max s=640x360 fps=30  
[dshow @ 03845420]   pixel_format=yuyv422  min s=352x288 fps=15 max s=352x288 fps=30  
[dshow @ 03845420]   pixel_format=yuyv422  min s=320x240 fps=15 max s=320x240 fps=30  
[dshow @ 03845420]   pixel_format=yuyv422  min s=800x448 fps=1 max s=800x448 fps=15  
[dshow @ 03845420]   pixel_format=yuyv422  min s=960x544 fps=1 max s=960x544 fps=10  
[dshow @ 03845420]   pixel_format=yuyv422  min s=1280x720 fps=1 max s=1280x720 fps=10  
[dshow @ 03845420]   pixel_format=yuyv422  min s=424x240 fps=15 max s=424x240 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=640x480 fps=15 max s=640x480 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=640x360 fps=15 max s=640x360 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=352x288 fps=15 max s=352x288 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=320x240 fps=15 max s=320x240 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=800x448 fps=15 max s=800x448 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=960x544 fps=15 max s=960x544 fps=30  
[dshow @ 03845420]   vcodec=mjpeg  min s=1280x720 fps=15 max s=1280x720 fps=30</pre>
<p>可以通过输出信息设置摄像头的参数。</p>
<p>例如，设置摄像头分辨率为1280&#215;720</p>
<pre>ffplay -s 1280x720 -f dshow -i video="Integrated Camera"</pre>
<p>设置分辨率为424&#215;240</p>
<pre>ffplay -s 424x240 -f dshow -i video="Integrated Camera"</pre>
<h4></h4>
<h4><strong>2.3. 编码为H.264，发布UDP</strong></h4>
<p>下面这条命令，实现了：获取摄像头数据-&gt;编码为H.264-&gt;封装为UDP并发送至组播地址。</p>
<pre>ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f h264 udp://233.233.233.223:6666</pre>
<p>注1：考虑到提高libx264的编码速度，添加了-preset:v ultrafast和-tune:v zerolatency两个选项。</p>
<p>注2：高分辨率的情况下，使用UDP可能出现丢包的情况。为了避免这种情况，可以添加–s 参数（例如-s 320&#215;240）调小分辨率。</p>
<p>&nbsp;</p>
<h4><strong> 2.4. 编码为H.264，发布RTP</strong></h4>
<p>下面这条命令，实现了：获取摄像头数据-&gt;编码为H.264-&gt;封装为RTP并发送至组播地址。</p>
<pre>ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtp rtp://233.233.233.223:6666&gt;test.sdp</pre>
<p>注1：考虑到提高libx264的编码速度，添加了-preset:v ultrafast和-tune:v zerolatency两个选项。</p>
<p>注2：结尾添加“&gt;test.sdp”可以在发布的同时生成sdp文件。该文件可以用于该视频流的播放。</p>
<p>&nbsp;</p>
<h4><strong>2.5. 编码为H.264，发布RTMP</strong></h4>
<p>下面这条命令，实现了：获取摄像头数据-&gt;编码为H.264-&gt;并发送至RTMP服务器。</p>
<pre>ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://localhost/oflaDemo/livestream</pre>
<p>&nbsp;</p>
<h4><strong>2.6. 编码为MPEG2，发布UDP</strong></h4>
<p>与编码为H.264类似，指明-vcodec即可。</p>
<pre>ffmpeg -f dshow -i video="Integrated Camera" -vcodec mpeg2video -f mpeg2video udp://233.233.233.223:6666</pre>
<p>播放MPEG2的UDP流如下。指明-vcodec为mpeg2video即可</p>
<pre>ffplay -vcodec mpeg2video udp://233.233.233.223:6666</pre>
<p>&nbsp;</p>
<h2><strong>3. 屏幕录制（Windows平台下保存为本地文件或者发送实时流）</strong></h2>
<p>Linux下使用FFmpeg进行屏幕录制相对比较方便，可以使用x11grab，使用如下的命令：</p>
<pre>ffmpeg -f x11grab -s 1600x900 -r 50 -vcodec libx264 –preset:v ultrafast –tune:v zerolatency -crf 18 -f mpegts udp://localhost:1234</pre>
<p>详细时使用方式可以参考这篇文章：<a href="http://www.waitwut.info/blog/2013/06/09/desktop-streaming-with-ffmpeg-for-lower-latency/" target="_blank">DesktopStreaming With FFmpeg for Lower Latency</a></p>
<p>Linux录屏在这里不再赘述。在Windows平台下屏幕录像则要稍微复杂一些。在Windows平台下，使用-dshow取代x11grab。一句话介绍：注册录屏dshow滤镜（例如screen-capture-recorder），然后通过dshow获取录屏图像然后编码处理。</p>
<p>因此，在使用FFmpeg屏幕录像之前，需要先安装dshow滤镜。在这里推荐一个软件：screen capture recorder。安装这个软件之后，就可以通过FFmpeg屏幕录像了。</p>
<p>&nbsp;</p>
<p>screen capture recorder项目主页：</p>
<p><a href="http://sourceforge.net/projects/screencapturer/" target="_blank">http://sourceforge.net/projects/screencapturer/</a></p>
<p>下载地址：</p>
<p><a href="http://sourceforge.net/projects/screencapturer/files" target="_blank">http://sourceforge.net/projects/screencapturer/files</a></p>
<p>下载完后，一路“Next”即可安装完毕。注意，需要Java运行环境（Java Runtime Environment），如果没有的话下载一个就行。</p>
<p>screen capture recorder本身就可以录屏，不过这里我们使用FFmpeg进行录屏。</p>
<p><a href="http://bernieyu.com/wp-content/uploads/2015/04/3.jpg"><img class="alignnone size-full wp-image-51" src="http://bernieyu.com/wp-content/uploads/2015/04/3.jpg" alt="3" width="529" height="125" /></a></p>
<p>&nbsp;</p>
<h4><strong>3.1. 编码为H.264，保存为本地文件</strong></h4>
<p>下面的命令可以将屏幕录制后编码为H.264并保存为本地文件。</p>
<pre>ffmpeg -f dshow -i video="screen-capture-recorder" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency MyDesktop.mkv</pre>
<p>注：“-r 5”的意思是把帧率设置成5。</p>
<p>最后得到的效果如下图。</p>
<p><a href="http://bernieyu.com/wp-content/uploads/2015/04/4.jpg"><img class="alignnone size-full wp-image-52" src="http://bernieyu.com/wp-content/uploads/2015/04/4.jpg" alt="4" width="554" height="403" /></a></p>
<p>此外，也可以录声音，声音输入可以分成两种：一种是真人说话的声音，通过话筒输入；一种是虚拟的声音，即录屏的时候电脑耳机里的声音。下面两条命令可以分别录制话筒的声音和电脑耳机里的声音。</p>
<p>录屏，伴随话筒输入的声音</p>
<pre>ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="鍐呰楹﹀厠椋?(Conexant 20672 SmartAudi" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libmp3lame MyDesktop.mkv</pre>
<p>上述命令有问题：audio那里有乱码，把乱码ANSI转UTF-8之后，开始测试不行，后来发现是自己疏忽大意，乱码部分转码后为“内装麦克风 ”，然后接可以正常使用了。因此，命令应该如下图所示：</p>
<pre>ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="内装麦克风 (Conexant 20672 SmartAudi" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libmp3lame MyDesktop.mkv</pre>
<p>注：</p>
<p>如果不熟悉ANSI转码UTF-8的话，还有一种更简单的方式查看设备的名称。即不使用FFmpeg查看系统DirectShow输入设备的名称，而使用DirectShow SDK自带的工具GraphEdit（或者网上下一个GraphStudioNext）查看输入名称。</p>
<p>打开GraphEdit选择“图像-&gt;插入滤镜”</p>
<p><a href="http://bernieyu.com/wp-content/uploads/2015/04/5.jpg"><img class="alignnone size-full wp-image-53" src="http://bernieyu.com/wp-content/uploads/2015/04/5.jpg" alt="5" width="604" height="478" /></a></p>
<p>然后就可以通过查看Audio Capture Sources来查看音频输入设备的简体中文名称了。从图中可以看出是“内装麦克风 (Conexant 20672 SmartAudi”。</p>
<p><a href="http://bernieyu.com/wp-content/uploads/2015/04/6.jpg"><img class="alignnone size-full wp-image-54" src="http://bernieyu.com/wp-content/uploads/2015/04/6.jpg" alt="6" width="450" height="495" /></a></p>
<p>PS：感觉这条命令适合做讲座之类的时候使用</p>
<p>&nbsp;</p>
<p>录屏，伴随耳机输入的声音</p>
<pre>ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libmp3lame MyDesktop.mkv</pre>
<p>PS：测这条命令的时候，这在听歌，因此录制的视频中的音频就是那首歌曲。</p>
<p>&nbsp;</p>
<h4><strong>3.2. 编码为H.264，发布UDP</strong></h4>
<p>下面的命令可以将屏幕录制后编码为H.264并封装成UDP发送到组播地址</p>
<pre>ffmpeg -f dshow -i video="screen-capture-recorder" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f h264 udp://233.233.233.223:6666</pre>
<p>注1：考虑到提高libx264的编码速度，添加了-preset:v ultrafast和-tune:v zerolatency两个选项。</p>
<p>注2：高分辨率的情况下，使用UDP可能出现丢包的情况。为了避免这种情况，可以添加–s 参数（例如-s 320&#215;240）调小分辨率。</p>
<p>&nbsp;</p>
<h4><strong>3.3. 编码为H.264，发布RTP</strong></h4>
<p>下面的命令可以将屏幕录制后编码为H.264并封装成RTP并发送到组播地址</p>
<pre>ffmpeg -f dshow -i video="screen-capture-recorder" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtp rtp://233.233.233.223:6666&gt;test.sdp</pre>
<p>注1：考虑到提高libx264的编码速度，添加了-preset:v ultrafast和-tune:v zerolatency两个选项。</p>
<p>注2：结尾添加“&gt;test.sdp”可以在发布的同时生成sdp文件。该文件可以用于该视频流的播放。如下命令即可播放：</p>
<pre>ffplay test.sdp</pre>
<p>&nbsp;</p>
<h4><strong>3.4. 编码为H.264，发布RTMP</strong></h4>
<p>原理同上，不再赘述。</p>
<pre>ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://localhost/oflaDemo/livestream</pre>
<p>注意：播放RTMP的时候，-max_delay参数会比较明显的影响延迟，将此参数值设定小一些，有利于降低延时。</p>
<pre>ffplay -max_delay 100000 "rtmp://localhost/oflaDemo/livestream live=1"</pre>
<p>&nbsp;</p>
<h2><strong>4. 另一种屏幕录制的方式（2014.10.1更新）</strong></h2>
<p>最近发现FFmpeg还有一个专门用于Windows下屏幕录制的设备：gdigrab。</p>
<p>gdigrab是基于GDI的抓屏设备，可以用于抓取屏幕的特定区域。在这里记录一下gdigrab的用法。</p>
<p>gdigrab通过设定不同的输入URL，支持两种方式的屏幕抓取：<br />
（1）“desktop”：抓取整张桌面。或者抓取桌面中的一个特定的区域。<br />
（2）“title={窗口名称}”：抓取屏幕中特定的一个窗口。</p>
<p>下面举几个例子。</p>
<p>最简单的抓屏：</p>
<pre>ffmpeg -f gdigrab -i desktop out.mpg</pre>
<p>从屏幕的（10,20）点处开始，抓取640&#215;480的屏幕，设定帧率为5</p>
<pre>ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg</pre>
<p>&nbsp;</p>
<p>转自：<a href="http://blog.csdn.net/leixiaohua1020/article/details/38284961" target="_blank">http://blog.csdn.net/leixiaohua1020/article/details/38284961</a></p>
<p>感谢原作者 <a href="http://my.csdn.net/leixiaohua1020" target="_blank">雷霄骅</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://bernieyu.com/2015/04/ffmpeg-get-directshow-device-cam-screen-record/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
