illuspas / Node-Media-Server

A Node.js implementation of RTMP/HTTP-FLV/WS-FLV/HLS/DASH/MP4 Media Server
https://www.npmjs.com/package/node-media-server
MIT License
5.9k stars 1.51k forks source link

转 HLS/DASH 直播流 使用验证的 m3u8地址如何使用? #498

Open qiaowei361 opened 2 years ago

qiaowei361 commented 2 years ago

http://ip:8000/live/zhibo.m3u8?sign=1873067467-030086ab5a32d97620445c7397e5b880

这样播放不了。

rtmp://ip/live/zhibo?sign=1873067467-030086ab5a32d97620445c7397e5b880

可以播放

我的app.js

const NodeMediaServer = require('node-media-server');

const config = { rtmp: { port: 1935, chunk_size: 60000, gop_cache: true, ping: 30, ping_timeout: 60 }, http: { port: 8000, mediaroot: './media', allow_origin: '*' }, auth: { api : true, api_user: 'admin', api_pass: 'adminadmin', play: true, publish: true, secret: 'year2019@888' } , trans: { ffmpeg: 'C:\Program Files\ffmpeg\ffmpeg.exe', tasks: [ { app: 'live', ac: 'aac', hls: true, hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]', dash: true, dashFlags: '[f=dash:window_size=3:extra_window_size=5]' } ] } };

var nms = new NodeMediaServer(config) nms.run();

========================================= ffmpeg路径正确,不知道是不是m3u8地址的问题

chenypgg commented 2 years ago

播放地址搞错了吧?rtmp的播放地址没有问题,其实就是你的推流地址 hls应该为:http://ip:8000/live/zhibo/index.m3u8?sign=1873067467-030086ab5a32d97620445c7397e5b880 dash为:http://ip:8000/live/zhibo/index.mpd?sign=1873067467-030086ab5a32d97620445c7397e5b880

qiaowei361 commented 2 years ago

播放地址搞错了吧?rtmp的播放地址没有问题,其实就是你的推流地址 hls应该为:http://ip:8000/live/zhibo/index.m3u8?sign=1873067467-030086ab5a32d97620445c7397e5b880 dash为:http://ip:8000/live/zhibo/index.mpd?sign=1873067467-030086ab5a32d97620445c7397e5b880 image 换了这个地址还是不存在。

qiaowei361 commented 2 years ago

image

chenypgg commented 2 years ago

看源码好像是没有获取到你配置的ffmpeg的版本信息,你发的第二张图片中,是判断ffmpeg版本的时候,version是undefined,它这个程序要求ffmpeg的版本大于4.0.0,你看一下这个你安装的ffmpeg版本号是多少

qiaowei361 commented 2 years ago

看源码好像是没有获取到你配置的ffmpeg的版本信息,你发的第二张图片中,是判断ffmpeg版本的时候,version是undefined,它这个程序要求ffmpeg的版本大于4.0.0,你看一下这个你安装的ffmpeg版本号是多少

image

感谢你的回复,版本号是:4.0以上的吧

chenypgg commented 2 years ago

你使用命令的方式调用一下ffmpeg -v 看一下呢,我这里下载的是ffmpeg 4.2.1,运行的时候没有报你的那个version错误,但是hls还是没有生产出来,只看到创建了live/zhibo/ 这个路径,但是zhibo下面的index.m3u8及对应的ts切片没有创建出来,我尝试改一下hlsFlags的命令参数试试

chenypgg commented 2 years ago

你的问题已经找到了原因了,你的app.js里面配置ffmpeg路径要写为: ffmpeg: 'C:/Program Files/ffmpeg/ffmpeg.exe' 如果你想要在windows环境下能播放m3u8地址,那么需要在node_trans_seesion.js的run方法中: let ouPath =${this.conf.mediaroot}/${this.conf.streamApp}/${this.conf.streamName}; 这句下面添加一行: ouPath = ouPath.replace(/\\/g, "/"); 希望能帮到你

qiaowei361 commented 2 years ago

你的问题已经找到了原因了,你的app.js里面配置ffmpeg路径要写为: ffmpeg: 'C:/Program Files/ffmpeg/ffmpeg.exe' 如果你想要在windows环境下能播放m3u8地址,那么需要在node_trans_seesion.js的run方法中: let ouPath =${this.conf.mediaroot}/${this.conf.streamApp}/${this.conf.streamName}; 这句下面添加一行: ouPath = ouPath.replace(/\\/g, "/"); 希望能帮到你

感谢你的回复和帮助,但是我在app.js修改了,还是不行。 image image

node_trans_seesion.js文件在哪里的?搜索了一下找不到。

chenypgg commented 2 years ago

微信图片_20211228135949 这个地方,你要确保你推的视频流编码为h264编码,音频的编码要确保为aac

chenypgg commented 2 years ago

比如你的这个服务的IP地址为172.16.5.100,开放了至少两个端口:http的为8000,https的为8443,RTMP的为1935,那么你推RTMP的时候,命令就为:ffmpeg -re -i yourMediaFile -acodec mp3 -vcodec libx264 -f flv rtmp://172.16.5.100:1935/live/zhibo

chenypgg commented 2 years ago

或者说你不能保证外部推流的视频和音频编码为我们想要的,那么我们可以在这个服务进行切片时指定视频和音频的编码,我这儿给你一个app.js的示例配置,可以保证m3u8出去的视频编码为h264,音频为aac

  trans: {
    ffmpeg:'F:/tools/ffmpeg-441/bin/ffmpeg.exe',
    tasks:[
      {
        app: 'live',
        ac: 'mp3',
        vc: 'libx264',
        hls: true,
        hlsFlags:'[f=hls:hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
        dash: false,
        dashFlags: '[f=dash:window_size=3:extra_window_size=5]'
      }
    ]
  }
qiaowei361 commented 2 years ago

或者说你不能保证外部推流的视频和音频编码为我们想要的,那么我们可以在这个服务进行切片时指定视频和音频的编码,我这儿给你一个app.js的示例配置,可以保证m3u8出去的视频编码为h264,音频为aac

  trans: {
    ffmpeg:'F:/tools/ffmpeg-441/bin/ffmpeg.exe',
    tasks:[
      {
        app: 'live',
        ac: 'mp3',
        vc: 'libx264',
        hls: true,
        hlsFlags:'[f=hls:hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
        dash: false,
        dashFlags: '[f=dash:window_size=3:extra_window_size=5]'
      }
    ]
  }

再次感谢你的帮助,还是不行,可以加一下我的Q:261735959吗?谢谢

image image image

chenypgg commented 2 years ago

已经添加你好友了,你要升级一下最新的代码,你当前使用的这个版本不是它最新的版本

qiaowei361 commented 2 years ago

已经添加你好友了,你要升级一下最新的代码,你当前使用的这个版本不是它最新的版本

经过chenypgg的远程帮助终于解决了,谢谢。(^_^)

两个地方,一是你的ffmpeg运行版本信息得到的字符串这个node-media-server它解析要出问题

二一个是你的nodeMedia不是最新版本

我把ffmpeg和nodeMediaServer都给你换成了可用的