·您当前的位置:主页 > 技术教程 > nginx教程 >

[hls]用ffmpeg做HLS协议切片方法教程

时间:2017-06-28 14:58酷播
nginx-rtmp-module和ffmpeg搭建实时HLS切片

1.rtmp服务器

  1. nginx+pcre+zlib+openssl+nginx-rtmp-module  
  2. ./configure \  
  3. --prefix=/usr/local/nginx \  
  4. --sbin-path=/usr/local/nginx/nginx \  
  5. --conf-path=/usr/local/nginx/nginx.conf \  
  6. --pid-path=/usr/local/nginx/nginx.pid \  
  7. --error-log-path=/usr/local/nginx/logs/error.log \  
  8. --with-pcre=/project/pcre-8.33 \  
  9. --with-zlib=/project/zlib-1.2.8 \  
  10. --with-http_dav_module \  
  11. --with-http_flv_module \  
  12. --with-http_stub_status_module \  
  13. --without-http_scgi_module \  
  14. --without-http_uwsgi_module \  
  15. --without-http_gzip_module \  
  16. --without-http_ssi_module \  
  17. --without-http_proxy_module \  
  18. --without-http_memcached_module \  
  19. --without-http_empty_gif_module \  
  20. --without-mail_pop3_module \  
  21. --without-mail_imap_module \  
  22. --without-mail_smtp_module \  
  23. --with-http_ssl_module \  
  24. --with-openssl=/project/openssl-1.0.1e \  
  25. --add-module=/project/nginx-rtmp-module-master  
  26. make && make install 

修改nginx-rtmp-module-master/test/rtmp-publisher目录下player.html中rtmp推流接收地址和stream

增加nginx-rtmp-module-master/test/rtmp-publisher目录下播放器相关文件权限x

具体参考:http://www.cnblogs.com/aHuner/p/3247068.html

2.rtmp实时推流

推流工具:Adobe Flash Media Live Encoder

必须同时推音频和视频,否则ffmpeg切片会报错,e2eSoft VCam做模拟视频输入,手机耳机插入PC麦克风插口做音频输入

3.安装x264

  1. wget ftp://ftp.videolan.org/pub/x264/snapshots/x264-snapshot-20120718-2245-stable.tar.bz2 
  2. tar jxvf x264-snapshot-20120718-2245-stable.tar.bz2 
  3. ./configure --prefix=/usr/local/x264 --disable-asm --enable-shared 
  4. make && make install 
  5. vi /etc/ld.so.conf 


加入:/usr/local/x264/lib

执行:ldconfig

4.安装aac

http://www.audiocoding.com/faac.html

./configure --prefix=/usr/local/faac--enable-shared

make&&make install

遇到错误:

mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’

解决方法:

vi common/mp4v2/mpeg4ip.h

修改第123行:

  1. #ifdef __cplusplus 
  2.  
  3. extern "C++" { 
  4.  
  5. #endif 
  6.  
  7. const char *strcasestr(const char *haystack, const char *needle); 
  8.  
  9. #ifdef __cplusplus 
  10.  
  11.  
  12. #endif 
  13.  
  14. vi /etc/ld.so.conf 

加入:/usr/local/faac/lib

执行:ldconfig

5.ffmpeg切片方案

./configure --disable-yasm --enable-libx264--enable-libfaac --enable-gpl --enable-shared --prefix=/usr/local/ffmpeg --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/lib

make && make install

如果linux下出现 ffmpeg: error while loading shared libraries: libavdevice.so.55: cannot open shared object file: No such file or directory

vi /etc/ld.so.conf

加入:/usr/local/ffmpeg/lib

执行:ldconfig

切本地文件命令:ffmpeg -i test.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts

切网络地址命令:ffmpeg -i rtmp://192.168.42.128/myapp/test1 -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts

设置视频编码库libx264和音频编码库libfaac:

./ffmpeg -y -i rtmp://192.168.42.128/myapp/test1 -pix_fmt yuv420p -vcodec libx264 -acodec libfaac -r 25 -profile:v baseline -b:v 150k -maxrate 200k -force_key_frames 50 -s 320x240 -map 0 -flags -global_header -f segment -segment_list playlist.m3u8 -segment_time 10 -segment_format mpeg_ts -segment_list_type m3u8 segment%05d.ts

6. nginx-rtmp-module切片

  1. application hls { 
  2.  
  3. live on; 
  4.  
  5. hls on; 
  6.  
  7. hls_path /project/nginx-rtmp-module-master/test/rtmp-publisher; 
  8.  


7.nginx实时rtmp播放地址

http://192.168.42.128/player.html

http://192.168.42.128/stat

8.HLS实时播放地址

http://192.168.42.128/playlist.m3u8

参考

Encoding HLS with ffmpeg:

http://sinclairmediatech.com/encoding-hls-with-ffmpeg/

热门文章推荐

请稍候...