标签: mpeg-dash

为什么我需要Dash.js来播放MPEG DASH视频?

我是新的html 5自适应流媒体和信息是相当矛盾的.我想在我的Windows服务器云上创建一个测试环境,流式传输一个2小时的h264文件,并在我的本地计算机上使用html5播放器播放.

问题:为什么我需要Dash.js来播放Mpeg短划线视频?Dash.js是我必须在服务器中安装的(听起来很明显)还是客户端(听起来很奇怪)?

html5-video mpeg-dash dash.js

8
推荐指数
2
解决办法
5090
查看次数

FFMPEG中创建碎片MP4的刷新和延迟问题

我正在使用以下命令为html5流创建一个支离破碎的mp4:

-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
Run Code Online (Sandbox Code Playgroud)
  1. "-i rtsp://172.20.28.52:554/h264"因为源是来自ip camera的rtp数据包流中的h264.为了测试,摄像机的GOP设置为1(即所有帧都是关键帧)
  2. "-vcodec copy"因为我不需要转码,只能转换到mp4.
  3. "-movflags empty_moov + default_base_moof + frag_keyframe"根据媒体源扩展规范创建一个分段的mp4.
  4. " - "最后为了输出mp4到stdout.我抓住了输出并通过网络套接字将其发送到webclient.

一切都运行良好,期待我试图解决的延迟问题.如果我每次从stdout进入数据时都会记录,并且到达时间戳,我得到这个输出:

16/06/2015 15:40:45.239数据大小= 24

16/06/2015 15:40:45.240得到的数据大小= 7197

16/06/2015 15:40:45.241得到数据大小= 32768

2015年6月16日15:40:45.241数据大小= 4941

2015年6月16日15:40:45.241数据大小= 12606

2015年6月16日15:40:45.241数据大小= 6345

16/06/2015 15:40:45.241得到数据大小= 6339

2015年6月16日15:40:45.242得到数据大小= 6336

2015年6月16日15:40:45.242得到数据大小= 6361

2015年6月16日15:40:45.242获得数据大小= 6337

16/06/2015 15:40:45.242得到数据大小= 6331

2015年6月16日15:40:45.242得到数据大小= 6359

16/06/2015 15:40:45.243得到的数据大小= 6346

16/06/2015 15:40:45.243得到的数据大小= 6336

2015年6月16日15:40:45.243数据大小= 6338

2015年6月16日15:40:45.243得到数据大小= 6357

2015年6月16日15:40:45.243得到数据大小= 6357

16/06/2015 15:40:45.243得到的数据大小= 6322

16/06/2015 15:40:45.243得到数据大小= 6359

2015年6月16日15:40:45.244数据大小= 6349

16/06/2015 …

mp4 ffmpeg video-streaming media-source mpeg-dash

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

Nginx-rtmp模块和mpeg-dash(Dash行业dash.js)

Mpeg Dash-Streaming

我正在撰写关于直播的论文.我用的ffmpeg,与RTMP模块和dash.js从ngix服务器短跑行业.我通过ffmpeg开始流向服务器,并且通过破折号播放,播放器运行良好,但是存在一些问题.

如果mpd-dash播放列表仍然具有块t = 0,则播放器仅播放,因此每当用户请求播放器和*.mpd更新时,块t = 0播放器都不会运行.

我将*.mpd文件上传到Dash Validator并收到错误:"Schematron验证未成功 - DASH无效!".但是玩家是由nginx生成的 - rtmp模块而不是我.

在搜索了一些论坛后,我得到了一些信息,nginx-rtmp模块生成错误的短划线播放列表*.mpd Nginx rtmp模块-bug,可能是该bug被修复并合并到github中的master(我认为是Mered - 报告).但我尝试下载最新的nginx和rtmp模块,播放器也播放不正确.

如果我玩2年前的dash.all.js版本:视频只播放好(播放结束)如果播放列表*.mpd中存在chunk t = 0,或播放器不播放(播放中间播放)如果我玩dash.all.js持续版本:视频播放并很快停止播放或循环播放.

我真的需要一些帮助,我的截止日期即将到来.

这是我的nginx配置(主配置):

    rtmp {

    server {
        listen 1935;
        ping 30s;
        notify_method get;
        chunk_size 4000;
        allow play all;

        application myapp {
            live on;
            dash on;
            dash_path /tmp/dash;

            hls on;
            hls_cleanup on;
            hls_sync 100ms;
            hls_fragment 2s;
            hls_path /tmp/hls;

            allow play all;


        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和其他一些配置:

location /hls {
        # Serve HLS fragments …
Run Code Online (Sandbox Code Playgroud)

nginx rtmp video-streaming mpeg-dash dash.js

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

创建MPEG-DASH初始化段

我期待在HLS和MPEG Dash之间进行转换.我不访问原始完全连接的视频文件,只访问单个HLS段.

在对MPEG Dash进行此转换时,我需要为Dash清单.mpd文件提供初始化段.

我的问题是:

  1. Dash视频初始化段的结构是什么?
  2. 如何在不需要原始完整文件的情况下生成/创建一个?

也许一个解决方案MP4Box是将'.ts'的HLS段转换为自动初始化的Dash'.m4s'段,但我不确定如何解决这个问题?

任何想法都非常感谢.

非常感谢.

更新:使用原始hls段流式传输的片段.视频一直播放,但只是黑色.

  <Representation width="426" height="238" frameRate="25" id="238p 400kbps" bandwidth="400000">
    <SegmentList timescale="25000" duration="112500">
           <SegmentURL media="video_0_400000/hls/segment_0.ts"/>
           <SegmentURL media="video_0_400000/hls/segment_1.ts"/>
          <SegmentURL media="video_0_400000/hls/segment_2.ts"/>
    </SegmentList>
   </Representation>
</AdaptationSet>
Run Code Online (Sandbox Code Playgroud)

ffmpeg http-live-streaming adaptive-bitrate mpeg-dash mp4box

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

ffmpeg 将 m4s 转换为 mp4

我正在研究 DASH,试图为最终用户优化 QoE。

我有一个视频,并使用 ffmpeg 将其编码为不同的比特率,一切都很好,并且可以使用 dash 播放该视频。

我想要的是将用户收到的片段合并为一个 m4,并将该 m4 转换为 mp4。

我在 ffmpeg 中尝试了很多方法,但它总是给我这个错误:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9a9e500] could not find corresponding track id 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9a9e500] could not find corresponding trex
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x9a9e500] error reading header
test2.m4s: Invalid data found when processing input
Run Code Online (Sandbox Code Playgroud)

那里有segment_1.m4s。

我该如何解决这个问题?

video mp4 ffmpeg mpeg-dash

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

使用 ffmpeg 生成单个 MPEG-Dash 片段

我一直在尝试实现一个类似 Plex 的视频播放器,可以按需转码任意视频文件,并在网页上使用 MPEG-Dash 播放它。我能够使用dash.js参考实现来实现客户端播放器,因此它将动态地从服务器请求片段(SegmentTemplate在 mpd 文件中使用)。

但我在实时生成这些块时遇到一些问题。Ffmpeg 允许我设置-ss-t定义所需片段的边界,但它们无法在播放器中正常播放,因为它们是“完整”视频文件而不是 Dash 片段。

那么,如何调整 ffmpeg 命令以将我需要的部分转码为 Dash 片段,而无需提前生成整个视频文件的片段?

输入视频文件可以是任何格式,因此不能假设它采用 mp4/dash 兼容的编解码器。因此需要转码(使用ffmpeg或类似工具)。

我当前的 ffmpeg 命令如下所示(经过多次尝试):

ffmpeg -ss 10 -t 5 -i video.mkv -f mp4 -c:a aac -c:v h264 -copyts -movflags empty_moov+frag_keyframe temp/segment.mp4
Run Code Online (Sandbox Code Playgroud)

客户端播放器应该能够缓冲接下来的 X 段,并且用户应该能够查看持续时间栏上的当前位置并寻找不同的位置。因此,将其视为直播并不是一个选择。

video ffmpeg transcoding mpeg-dash

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

Chromecast是否支持MPEG-DASH清单中的TS容器格式

在他们的开发者文档中,他们说他们支持以下内容:

•容器:MP4/CENC,WebM,MPEG-DASH,SmoothStreaming

但是,MPEG-DASH和SmoothStreaming是允许各种容器的流协议.MPEG-DASH规范允许MPEG2-TS块,但我没有看到任何有关DASH清单内支持的容器格式的信息.

google-cast chromecast mpeg-dash

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

使用Media Source API更改平滑表示

我目前正在使用JavaScript和MediaSource API处理DASH播放器

流媒体工作正常,但我坚持改变表示.在播放期间更改表示的最强制方式可能是替换HTML文档中的<video>元素.

Hovewer,我想知道是否有一种简单的方法来使用Media Source API实现适应(更改表示).我已经读过单个Media Source对象可以处理许多源缓冲区,但是在添加第二个视频缓冲区之后会引发异常.

我使用的是Chrome 43.0.2357.65m

var mediaSource = MediaSource();
var url = URL.createObjectURL(mediaSource);

videoElement.src = url;

mediaSource.addEventListener('sourceopen', function () {
    var buffer1 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
    var buffer2 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
}
Run Code Online (Sandbox Code Playgroud)

例外:

Uncaught QuotaExceededError: Failed to execute 'addSourceBuffer' on    'MediaSource': This MediaSource has reached the limit of SourceBuffer objects it can handle. No additional SourceBuffer objects may be added.
Run Code Online (Sandbox Code Playgroud)

javascript media-source mpeg-dash

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

如何查看 .mp4 视频文件的“代码”?

我知道我的术语不正确,但在视频方面我是一个完整的新手。

我有一个普通的 .mp4 视频文件。我使用 MP4Box 来分割视频文件,这样我就可以使用支持 MPEG dash 的视频播放器播放它。它不是通过创建多个较小的视频文件来分割的。它会创建一个比旧视频文件大一点的新的大视频文件。

我想将常规视频文件与虚线视频文件进行比较,看看 MP4Box 对它做了什么来分割它。我相信它正在向新视频文件添加某种类型的标题。显然,当我在文本编辑器中打开它时,它是不可读的。我该如何比较这些文件?

video mpeg video-streaming mpeg-dash

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

FFmpeg 在使用 PUT 方法时会忽略一些 HTTP 选项

我正在使用 FFmpeg 创建 CMAF 流,并使用FFMpeg的方法将其上传到AWS资源 (AWS MediaStore) PUT。我需要Content-Type在上传清单和段时传递标头。我有 3 种类型的文件:

application/x-mpegURL : m3u8 清单

application/dash+xml : mpd 清单

video/mp4 : 视频片段

目前,所有类型都Binary - octet-streamAWS资源 (AWS MediaStore)中设置为。由于我将上传大量文件,因此无法在文件上传后使用 AWS Lambda 函数设置正确的内容类型。

FFmpeg 上传日志

[https @ 0x555fe7a7d1c0] Opening 'https://XXXX.YYYY.amazonaws.com/chunk-stream0-00001.mp4' for writing
[https @ 0x555fe7a7d0c0] request: PUT /chunk-stream0-00001.mp4 HTTP/1.1
Transfer-Encoding: chunked
User-Agent: Lavf/58.28.100
Accept: */*
Connection: keep-alive
Host: XXXXX.YYYY.amazonaws.com
Icy-MetaData: 1
Run Code Online (Sandbox Code Playgroud)

我的尝试

我尝试了 FFMpeg 的静态构建和主分支。我尝试了不同的方法来传递内容类型,但没有成功:

-mime_type 1 -headers "Content-type: video/mp4\r\n"

-mime_type "video/mp4,application/dash+xml,application/x-mpegURL"

-content_type application/dash+xml

-multiple_requests …

ffmpeg mediastore amazon-web-services http-live-streaming mpeg-dash

6
推荐指数
0
解决办法
1337
查看次数