相关疑难解决方法(0)

如何减小H.264电影的Moov Atom大小以改善智能手机的流媒体启动?

我们运行视频服务,将电影流式传输到智能手机(iOS&Android)。我们使用H.264 + AAC编码,并使用mp4容器。我们有一个问题,即长电影(超过60分钟)需要很长的时间才能开始播放,并且已经跟踪到这些电影的Moov原子很大。对于110分钟的电影,原子大小高达4.2Mb,这显然需要很长时间才能通过3G下载到智能手机!

无论如何,可以使moov原子变小吗?我们可以通过降低音频采样率来降低比特率,但是显然任何低于22kHz的东西都是不可接受的。

我们使用ffmpeg作为编码器,并使用MP4Box将元数据移动到文件的开头。有没有办法使它变小?还有其他编码器可以使运动幅度减小吗?

例如...

大(280 Mb,1h 49min)可流mp4(h.264,AAC)文件的标头大(4.2 Mb)。通过两次传递ffmpeg和MP4Box对文件进行编码,以将元数据替换为文件的开头:

/usr/bin/ffmpeg -i /var/lib/encoder/incoming/2388 -aspect 320:210 -threads 8 -vcodec libx264 -profile baseline -level 13 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method hex -subq 7 -trellis 1 -refs 5 -bf 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -b:v 270k -maxrate 270k -bufsize 270k -g 30 -passlogfile /tmp/mediaservice/3100/video-IPH.ffmpeg -an -f rawvideo -pass 1 -y /dev/null

/usr/bin/ffmpeg -i /var/lib/encoder/incoming/2388 -aspect 320:210 -threads 8 -vcodec …
Run Code Online (Sandbox Code Playgroud)

mp4 encoding ffmpeg aac h.264

5
推荐指数
1
解决办法
4928
查看次数

从原始 H.264 帧流创建视频流服务器

我有一个 IP 摄像头 (VisionTech VN6xSM3Ti),它返回 H.264 原始数据的视频流,我如何使用此流创建可通过 HTML5 浏览器访问的实时流?

要访问摄像机流,我必须遵循制造商提供的指定协议,因此并不像仅使用 IP 地址访问它那么容易。

我已经在 C# 和 C 中编写了将相机流作为字节数组读取的代码,但我不知道如何继续。

我一直在考虑用 Node.JS 解决它,我的代码如下:

  1. 使用我的代码访问相机流并通过本地套接字公开它
  2. 在 Node.JS 中访问创建的套接字并将其内容流式传输到所有客户端

IP 摄像机原始数据 ---> 我的代码 --- 本地套接字 --> Node.js --- ?? ---> 客户

有谁知道这是否可以做到?或者是否有更好的选择?

c c# video-streaming h.264

5
推荐指数
0
解决办法
2024
查看次数

实时将 ts 片段复用为碎片化 mp4

我有一个在浏览器中播放的 HLS 流。我想要做的是有一个像这样的 URL,/stream.mp4可以从当前时间点将直播回放为碎片 mp4。这样您就可以将流下载为单个文件,并且无需任何 js 依赖即可运行。

我想到的方法是:

  1. 发送 mp4 标头
  2. 等待新的段
  3. 将片段转换为 mp4 片段ffmpeg
  4. 发送mp4片段
  5. 转到2。

(我知道你可以连接.ts片段,但它们不能在 Firefox 中播放。)

这个答案描述了当您手头有所有片段时如何创建碎片mp4(tl;dr use -movflags frag_keyframe+emptymoov)。但我想动态执行此操作,以便每个新的 HLS 片段在创建后立即转换为 mp4 片段。

我认为这与 DASH 本身的做法类似,chunk-$n.m4s可以附加任何块init.m4s,并且它将是一个适当的碎片 mp4。但这可以在不使用 DASH 的情况下完成吗?

如何将 ts 片段转复用为 mp4 片段?

编辑:我找到了一种做我想做的事情的方法,但不是通过将 mpegts 片段转换为 fmp4。事实证明,HLS 的更高版本确实支持分段 mp4(就像 DASH 一样),并且 FFmpeg-hls_segment_type fmp4为此提供了选项。

video mp4 ffmpeg http-live-streaming

5
推荐指数
0
解决办法
811
查看次数

音频/mp4;codecs="mp4a.40.2" 无法在 Chrome 和 Firefox 中播放

我似乎想将我想在网站上流式传输的音频转换为audio/mp4; codecs="mp4a.40.2".

使用ffmpeg-cli-wrapper,我在此处使用以下命令转换我上传的音频文件:

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.aac
Run Code Online (Sandbox Code Playgroud)

在客户端上,我创建一个像这样的 SourceBuffer:

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.aac
Run Code Online (Sandbox Code Playgroud)

错误是:

铬合金:

NotSupportedError: Failed to load because no supported source was found.
Run Code Online (Sandbox Code Playgroud)

火狐浏览器:

NotSupportedError: The media resource indicated by the src attribute or assigned media provider object was not suitable.
Run Code Online (Sandbox Code Playgroud)

有趣的部分来了:

audio/aac如果我使用mime-type创建 SourceBuffer :

this.sourceBuffer = this.mediaSource.addSourceBuffer('audio/mp4; codecs="mp4a.40.2"');
Run Code Online (Sandbox Code Playgroud)

音频在 Chrome 上正确播放,但 Firefox 说:

MediaSource.addSourceBuffer: Type not supported in MediaSource
Run Code Online (Sandbox Code Playgroud)

更新

将命令更改为后

ffmpeg -i /tmp/input.any …
Run Code Online (Sandbox Code Playgroud)

firefox google-chrome ffmpeg audio-streaming media-source

1
推荐指数
1
解决办法
1万
查看次数