goldvideo / h265player

一套完整的Web版H.265播放器解决方案,非常适合学习交流和实际应用。基于JS码流解封装、WebAssembly(FFmpeg)视频解码,利用Canvas画布投影、AudioContext播放音频。
https://goldvideo.github.io/h265player/
1.53k stars 298 forks source link

goldplay播放相机(H.265)视频 #70

Open zhujiarun opened 3 years ago

zhujiarun commented 3 years ago

相机视频格式调成了H.265,并且将rtsp转成http(没有啥编解码只是换了一下头)。然后就放不出视频,想请教一下是需要什么其他设置吗

yiwen03 commented 3 years ago

你是怎么用的?视频封装格式是什么?

------------------ 原始邮件 ------------------ 发件人: zhujiarun @.> 发送时间: 2021年9月1日 13:26 收件人: goldvideo/h265player @.> 抄送: Subscribed @.***> 主题: 回复:[goldvideo/h265player] goldplay播放相机(H.265)视频 (#70)

相机视频格式调成了H.265,并且将rtsp转成http(没有啥编解码只是换了一下头)。然后就放不出视频,想请教一下是需要什么其他设置吗

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

zhujiarun commented 3 years ago

这是自己创建的rtmp的name
rtspLoad:是一个uuid let rtmpName = rtmp://${this.nginxIp}:1935/cloubox_07/${rtspLoad}; 然后用fluent-ffmpeg启动ffmpeg //启动ffmpeg startFfmpeg(camera_rtsp, rtmpName) { try { return new Promise((resolve, reject) => { let command = ffmpeg(); command.input(camera_rtsp); command.inputOptions("-stimeout 5000000"); command.inputOptions("-rtsp_transport tcp"); command.outputOptions("-max_muxing_queue_size 1024"); command.audioCodec('aac'); command.videoCodec("copy"); command.on("start", () => {}); command.on("codecData", () => {resolve(1);}); command.on("error", (err) => {reject(err); }); command.on('end', (stdout, stderr) => { }); command.format("flv"); command.save(rtmpName); }); } catch (error) { Logger.error("start ffmpeg failed!!!!",new Error(error)); } } 最后用上方的rtspLoad构建一个http httpName = http://${this.nginxIp}:${key}/stream?port=1935&app=cloubox_07&stream=${rtspLoad};

yourchanges commented 2 years ago

现在的实现有问题 不支持动态生成的hls协议的 .m3u8

如下面的命令:

ffmpeg -fflags genpts -rtsp_transport tcp \
    -i rtsp://xxx:yy@xxx.xxx.com:554/Streaming/Channels/1201 \
    -c:v copy -c:a copy -s 1920x1080  -f hls -hls_segment_type mpegts -hls_time 4 -hls_list_size 3 \
    -hls_flags delete_segments+append_list+split_by_time   ./rtsp/out.m3u8

那么 out.m3u8

就是

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:281
#EXTINF:4.000000,
out281.ts
#EXTINF:3.840000,
out282.ts
#EXTINF:4.120000,
out283.ts

这个m3u8 每3个新的ts 文件生成 就会变一下内容, 靠EXT-X-MEDIA-SEQUENCE 找到第一个, 播放完 就再加载一次m3u8. 没有 #EXT-X-ENDLIST 结束, 因为是实时直播流 不会结束

yourchanges commented 2 years ago

可以看看hls.js 对 播放列表的处理, 视频内容应该是正常播放的