基于nginx-rtmp实现电视回看业务

/

软硬件环境

  • ubuntu 16.04 64bit
  • Android Studio 2.2.3
  • OTT BOx with android 5.1.1
  • nginx 1.11.3
  • nginx-rtmp-module

简介

电视回看是数字电视领域的另一项基础功能,它能提供一定时长的电视回放,可以实现像点播业务中的暂停,快进,快退等功能,一般的运营商都会提供回看的服务.本文讲述如何基于nginx-rtmp来实现电视回看.

原理

电视回看的核心是节目的录制.你可以选择与直播同步录制或者指定时间段录制,录制结束后生成节目资源的播放url,客户端拿到url进行播放,播放的过程和点播一样.

实践

nginx-rtmp配置文件

先来看看配置文件nginx.conf

  1. #user nobody;
  2. worker_processes auto;
  3. rtmp_auto_push on;
  4. error_log logs/error.log debug;
  5. #error_log logs/error.log notice;
  6. #error_log logs/error.log info;
  7. events {
  8. worker_connections 1024;
  9. }
  10. rtmp {
  11. server {
  12. listen 1935;
  13. chunk_size 4000;
  14. # HLS
  15. application hls {
  16. live on;
  17. hls on;
  18. hls_path /opt/www/live;
  19. hls_continuous on;
  20. hls_sync 100ms;
  21. hls_nested on;
  22. wait_key on;
  23. hls_playlist_length 5m;
  24. hls_cleanup on;
  25. hls_fragment 10s;
  26. # hls_keys on;
  27. # hls_key_path /opt/www/keys;
  28. # hls_key_url http://10.10.10.79:8081/keys;
  29. # hls_fragments_per_key 10;
  30. recorder all {
  31. record all manual;
  32. record_suffix -%Y-%m-%d-%H_%M_%S.flv;
  33. record_unique on;
  34. record_path /opt/www/record;
  35. }
  36. }
  37. }
  38. }
  39. # http
  40. http {
  41. server {
  42. listen 8081;
  43. location / {
  44. root /opt/www/;
  45. }
  46. # This URL provides RTMP statistics in XML
  47. location /stat {
  48. rtmp_stat all;
  49. rtmp_stat_stylesheet stat.xsl;
  50. }
  51. location /stat.xsl {
  52. root /home/djstava/Workshop/Web/nginx-rtmp-module/;
  53. }
  54. location /control {
  55. rtmp_control all;
  56. }
  57. location /hls {
  58. types {
  59. application/vnd.apple.mpegurl m3u8;
  60. video/mp2t ts;
  61. }
  62. root /opt/www/;
  63. add_header Cache-Control no-cache;
  64. }
  65. location /dash {
  66. root /opt/www/;
  67. add_header Cache-Control no-cache;
  68. }
  69. }
  70. }

主要关注下rtmp标签下的recorder和http标签下的control,录制的节目保存在/opt/www/record,/opt/www是nginx的根目录,便于http播放.

直播模拟

利用ffmpeg推送本地文件到服务器模拟直播

  1. ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -y -f flv rtmp://10.10.10.52/hls/live

节目录制

开始录制

  1. curl "http://10.10.10.52:8081/control/record/start?app=hls&name=live&rec=all"

结束录制

  1. curl "http://10.10.10.52:8081/control/record/stop?app=hls&name=live&rec=all"

录制完成后会在/opt/www/record目录下生成相应的flv文件

nginx_rtmp_record

客户端播放

播放需要的是url,把录制的文件名和主机nginx访问目录拼接一下,很简单,这里的话就是http://10.10.10.52:8081/record/-1483066808-2016-12-30-11_00_08.flv

参考文献

转载请注明作者和出处,并添加本页链接。
原文链接:http://xugaoxiang.com/post/98

给我留言