Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

是否有计划拉流代理增加h265转h264功能? #364

Closed
zhangzlyuyx opened this issue Jun 24, 2020 · 25 comments
Closed

是否有计划拉流代理增加h265转h264功能? #364

zhangzlyuyx opened this issue Jun 24, 2020 · 25 comments

Comments

@zhangzlyuyx
Copy link

设备视频输出为rtsp h265(降低设备存储占用),用流媒体服务器后,输出同时为h265,但h265在android/ios/h5端的播放兼容不是很好。

@xia-chu
Copy link
Member

xia-chu commented Jun 24, 2020

这个涉及到FFmpeg转码,你这个issue先不关闭,后续考虑做这个,但是时间未定,看情况。

@tsingeye
Copy link
Contributor

srs也是基于ffmpeg来进行转码的吧

@Yordroid
Copy link

这个涉及到FFmpeg转码,你这个issue先不关闭,后续考虑做这个,但是时间未定,看情况。
我们也有这个需求

@ZhouMin216
Copy link

不是可以通过/index/api/addFFmpegSource接口配合配置文件参数,在拉流时进行转码输出吗?

@ZhouMin216
Copy link

不是可以通过/index/api/addFFmpegSource接口配合配置文件参数,在拉流时进行转码输出吗?

我可以通过/index/api/addFFmpegSource接口拉取h265的流,然后转成h264推流到其他服务器上,但是推给自己时超时了。
详见https://github.com/xia-chu/ZLMediaKit/issues/739

@xlsky0713
Copy link

我们也急需这个功能,希望大神支持

@xia-chu
Copy link
Member

xia-chu commented Mar 16, 2021

addFFmpegSource接口就能满足你需求啊

@KevinLJJ
Copy link

KevinLJJ commented Jul 9, 2021

急需该功能。。

@xia-chu
Copy link
Member

xia-chu commented Jul 9, 2021

先用addFFmpegSource接口顶顶吧

急需该功能。。

@KevinLJJ
Copy link

KevinLJJ commented Jul 9, 2021

先用addFFmpegSource接口顶顶吧

急需该功能。。

烦请是否可以提供一个H265转H264的ffmepg.cmd模板,我看默认的模板已经包含-c:v libx264?,非常感谢您的回复!

@xia-chu
Copy link
Member

xia-chu commented Jul 9, 2021

先用addFFmpegSource接口顶顶吧

急需该功能。。

烦请是否可以提供一个H265转H264的ffmepg.cmd模板,我看默认的模板已经包含-c:v libx264?,非常感谢您的回复!

默认就转264的啊

@KevinLJJ
Copy link

先用addFFmpegSource接口顶顶吧

急需该功能。。

烦请是否可以提供一个H265转H264的ffmepg.cmd模板,我看默认的模板已经包含-c:v libx264?,非常感谢您的回复!

默认就转264的啊

使用默认模板后,从VLC拉hls.m3u8流十几秒后出现间断花屏,烦请问您是否有遇到过?

@xia-chu
Copy link
Member

xia-chu commented Jul 10, 2021

zlm代码版本多少

先用addFFmpegSource接口顶顶吧

急需该功能。。

烦请是否可以提供一个H265转H264的ffmepg.cmd模板,我看默认的模板已经包含-c:v libx264?,非常感谢您的回复!

默认就转264的啊

使用默认模板后,从VLC拉hls.m3u8流十几秒后出现间断花屏,烦请问您是否有遇到过?

@penghd
Copy link

penghd commented Sep 14, 2021

我们测试,服务器端ffMpeg转码一路对CPU消耗就很大,因为服务器。没。显。卡,建议不要使用。
现在WVP-GB28181-PRO使用的前端JessiBuca可以播放H.265 FLV,CPU占用还可以。ZLM的H265 m3u8,在安卓里微信链接就直接可以顺畅打开,但IOS微信还是不行。

@xia-chu
Copy link
Member

xia-chu commented Sep 16, 2021

我们测试,服务器端ffMpeg转码一路对CPU消耗就很大,因为服务器。没。显。卡,建议不要使用。
现在WVP-GB28181-PRO使用的前端JessiBuca可以播放H.265 FLV,CPU占用还可以。ZLM的H265 m3u8,在安卓里微信链接就直接可以顺畅打开,但IOS微信还是不行。

是的 ios的hls在265时,要求为fmp4切片,而不是ts切片

@HammerZhao
Copy link

最简单的自己从那个test player proxy 那个例子程序改一下 拉下来然后自己转一遍在push回去就可以了啊

@wujianGit123
Copy link

最简单的自己从那个test player proxy 那个例子程序改一下 拉下来然后自己转一遍在push回去就可以了啊

不用这么麻烦而且push回去经过几个独立进程的隔离,很难操作,srs的拉流ingest机制使用ffmpeg独立进程来拉流就是我及其讨厌的一个地方,这样做很难对码流进行操作,而且每拉一路视频就要启动一个ffmpeg进程,这是内存的极大浪费。
这个问题我实现了一套方案,首先设计一个分流器(我自己创建的概念),分流器我觉得很有必要添加到zlm里面,用来方便对转码和码流发送(如gb28181)等进行管理,现在zlm的做法将gb28181发流的功能耦合到MultiMediaSourceMuxer类里面,这样大大增加了代码耦合度,有了分流器可以用单例管理实例获取分流器,然后执行转码和gb28181发流操作。
回到转码的问题,我的做法是zlm底层添加转码器接口,上层根据不同应用实现转码接口。我独立了一个基于ffmpeg库的专门用于转码的服务器进程,调用ffmpeg的函数来进行转码然后封装成zlm的frame数据,用自定义的通讯协议(主要是boost的serialization)与zlm服务器通讯传输转码前后的码流,这样设计使得转码流程对于zlm来说几乎是透明的,大大降低代码耦合度。
我本想提交分流器和转码器接口的相关代码到我fork的分支供原作者审核,奈何国内github被墙clone和提交不了。

@xia-chu
Copy link
Member

xia-chu commented Dec 24, 2021 via email

@xia-chu
Copy link
Member

xia-chu commented Jun 9, 2022

feature/transcode分支已经实现

@xia-chu xia-chu closed this as completed Jun 9, 2022
@fuuhoo
Copy link

fuuhoo commented Jun 10, 2023

feature/transcode分支已经实现

主分支的docker有没有这个功能,没看到相关参数呢

@Neon-C23
Copy link

Neon-C23 commented Feb 5, 2024

feature/transcode分支已经实现

请问该分支编译出来的ZLMediaServer如何使用H265转H264,是自动转的吗?没在相关配置或文档看到有关说明。

@DXnima
Copy link

DXnima commented Apr 18, 2024

feature/transcode分支已经实现

请问该分支编译出来的ZLMediaServer如何使用H265转H264,是自动转的吗?没在相关配置或文档看到有关说明。

请问会配置使用了吗?

@corey1202
Copy link

只是增加了语音转码,没有实现视频的H265转H264吧,自己在MultiMediaSourceMuxer 的 onTrackReady中增加了如下转换功能, 但是没有拉流端无法正确接收流, 提示 No start code is found. 等错误, 请问如何修改呢
H265Track::Ptr pH265Track = static_pointer_cast(track);
H264Track::Ptr pH264Track(new H264Track);
pH264Track->setVideoWidth(pH265Track->getVideoWidth());
pH264Track->setVideoHeight(pH265Track->getVideoHeight());
pH264Track->setVideoFps(pH265Track->getVideoFps());
pH264Track->setBitRate(pH265Track->getBitRate());
m_pVideoDecoder.reset(new FFmpegDecoder(track));
m_pVideoEncoder.reset(new FFmpegEncoder(pH264Track));
m_pVideoDecoder->setOnDecode([this](const FFmpegFrame::Ptr &frame) {
m_pVideoEncoder->inputFrame(frame, false);
});
m_pVideoEncoder->setOnEncode([this, pH264Track](const Frame::Ptr &frame) {
pH264Track->inputFrame(frame);
this->onTrackFrame(frame);
});
addTrack(pH264Track);

@corey1202
Copy link

不知道理解的对不对,要实现推流用的h265, 拉流自动转成H264。按照流程, 在MultimediaSourceMuxer::onTrackReady中自己实现转码即可吧,如果是H265编码,则调用 addTrack把生成的H264 track 添加进来, 否则添加H265的track; 要么自己实现 MultimediaSourceMuxer::addTrack() 里做这一步,想请教一下

@ZLMediaKit ZLMediaKit deleted a comment from corey1202 May 28, 2024
@CxistHans
Copy link

@xia-chu 请问这个功能实现了? addStreamProxy 的时候默认进行转码? 例如加点参数,就能实现自动转码?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests