标签: mpeg-dash

从 mediasource 源缓冲区中动态附加和删除 mpeg-dash 段

我正在使用 HTML5 视频元素编写一个简单的 mpeg-dash 流媒体播放器。我正在创建MediaSource并将其附加SourceBuffer到它。然后我将破折号片段附加到这个源缓冲区中,一切正常。

现在,我想要做的是,我想根据媒体元素的当前时间动态预取这些片段。这样做时有很多疑问,MediaSource文档没有回答这些疑问。

  1. 是否可以知道 sourceBuffer 一次可以支持多少数据?如果我有一个非常大的视频并将所有片段附加到源缓冲区中,它会容纳所有片段或导致错误还是会降低浏览器的速度?

  2. 如何计算源缓冲区中的片段数?

  3. 如何计算最后一个片段的呈现时间或结束时间SourceBuffer

  4. 我们如何仅从中删除特定的片段集SourceBuffer并将其替换为具有其他分辨率的片段?(我想这样做是为了支持自适应分辨率切换运行时。)

谢谢。

javascript media-source mpeg-dash

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

ffmpeg,由于未指定的像素格式,无法创建破折号清单

我在OSX上使用ffmpeg 2.8.

我尝试将短mp4视频转换为webm以进行自适应流媒体,如此处所建议的http://wiki.webmproject.org/adaptive-streaming/instructions-to-playback-adaptive-webm-using-dash如下:

VP9_DASH_PARAMS="-tile-columns 6 -frame-parallel 1"

ffmpeg -i t2.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 250k -keyint_min 150 -g 150 ${VP9_DASH_PARAMS} -an -f webm -dash 1 video_160x90_250k.webm
ffmpeg -i t2.mp4 -c:a libvorbis -b:a 128k -vn -f webm -dash 1 audio_128k.webm

ffmpeg \
 -f webm_dash_manifest -i video_160x90_250k.webm \
 -f webm_dash_manifest -i audio_128k.webm \
 -c copy -map 0 -map 1 \
 -f webm_dash_manifest \
 -adaptation_sets "id=0,streams=0 id=1,streams=1" \
 manifest.mpd
Run Code Online (Sandbox Code Playgroud)

但是这给了我一个未指定像素格式的警告:

[webm_dash_manifest @ 0x7f9414812800] Could not find codec parameters …
Run Code Online (Sandbox Code Playgroud)

ffmpeg webm mpeg-dash vp9

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

MPEG-DASH和RTSP有什么区别?

  • 实时流协议(RTSP) - 是一种媒体播放控制协议.可与RTSP结合使用的其他协议包括:
    • 实时传输协议(RTP) - 用于通过IP网络传送多媒体(例如音频和视频流)的分组格式.RTP是RTCP的姐妹协议.
    • RTP控制协议(RTCP) - 用于监视传输指标和服务质量(QoS),同时帮助多个流的同步.RTCP是RTP的姐妹协议.
    • 会话描述协议(SDP) - 由RTSP等协议用于在握手的初始化阶段描述媒体流.

正如我将上述协议归结为1或2个句子一样,我希望有人能够回答:用外行人的话说,MPEG-DASH和RTSP有什么区别?

从高层次来看,MPEG-DASH似乎是RTSP + RTP + RTCP + SDP的替代品.

media streaming protocols rtsp mpeg-dash

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

自适应流媒体播放器播放列表更新间隔

关于自适应流媒体播放器的行为(具体地说我对HLS和DASH感兴趣),它应该多久重新加载播放列表?这是指定还是由播放器实现?

当它重新加载播放列表时,是仅针对所谓的变体播放列表还是每次重新加载主节点?

这对于直播和点播内容有何不同?

video-streaming playlist http-live-streaming mpeg-dash

3
推荐指数
2
解决办法
2273
查看次数

只有单个mp4文件的MPEG-DASH视频流

我正在研究一个星期,找到一个简单且独立于平台的方法来将mp4文件流式传输到任何浏览器.在浏览器不兼容的情况下,将使用渐进流(直接下载)方法.我的情况是这样的:

  • 单个mp4文件(不分段和多路复用(音频+视频))
  • 支持HTTP字节范围服务
  • 浏览器不兼容时支持渐进式流(直接文件下载)

在研究Apple HLS,Adobe Flash Stream,Microsoft Smooth,RTSP和MPEG-DASH之后,似乎MPEG-DASH是正确的解决方案.但问题是MPEG-DASH迫使我将mp4文件拆分为单独的分段文件,这导致存储mp4文件的重复消耗空间,因为在浏览器不兼容的情况下我必须支持渐进式流.然后存储带有分段mp4文件的单个mp4文件是不可避免的.

问题是:有没有办法在任何浏览器中将单个 mp4文件作为http流渐进流提供?

MPEG-DASH协议表示它支持多路复用文件,但问题是dash.js不支持它.有没有其他javascript播放器支持带字节范围请求的多路复用和单个mp4文件?

任何其他提交我的场景条件的解决方案都受到欢迎.谢谢.

参考文献: BitCodin.com 1 BitCodin.com 2

javascript http video-streaming mpeg-dash dash.js

3
推荐指数
2
解决办法
9158
查看次数

低延迟DASH Nginx RTMP

我在媒体服务器上使用arut nginx-rtmp-module(https://github.com/arut/nginx-rtmp-module),然后尝试使用FFmpeg流式传输到dash应用程序,然后通过使用播放流来测试流VLC。

它等待大约30秒才能开始播放,并且从头开始播放,而不是当前时间戳。

这是我当前在RTMP块上的配置

rtmp {
    server {
        listen 1935;

        application live {
            live on;

           exec ffmpeg -re -i rtmp://localhost:1935/live/$name
              -c:a libfdk_aac -b:a 32k  -c:v libx264 -b:v 128K -f flv rtmp://localhost:1935/hls/$name_low
              -c:a libfdk_aac -b:a 64k  -c:v libx264 -b:v 256k -f flv rtmp://localhost:1935/hls/$name_mid
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost:1935/hls/$name_hi
              -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost:1935/dash/$name_dash;
        }

        application hls {
             live on;

             hls on;
             hls_path /tmp/hls;
             hls_nested on; …
Run Code Online (Sandbox Code Playgroud)

ffmpeg nginx rtmp mpeg-dash

3
推荐指数
3
解决办法
8573
查看次数

为 Shaka 播放器设置 ClearKey 服务器不起作用?

我创建了一个测试 html 页面来播放 MPEG-CENC 保护的 MPEG-DASH 视频,如果我在player.configure() 中指定kid: 密钥对,我就可以播放。

然后我想设置一个clearkey服务器。请参阅Shaka Player 文档的DRM 配置部分,我更改了代码以指定获取许可证的 url,如下所示。但是当我在 Visual Studio 中的 Page_Load 事件中设置断点时,页面永远不会被触及。浏览器控制台没有错误。

我使用的浏览器是Firefox 53.0.2和Chrome 58.0.3029.96。我错过了什么?

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/shaka-player/2.1.0/shaka-player.compiled.js"></script>
    <title>MPEG-DASH Player Test</title>
    <script>
        //MPEG-DASH stream encrypted with MPEG-CENC:
        var manifestUri = '/dashtest_encrypted/stream.mpd';

        function initApp() {
            // Install built-in polyfills to patch browser incompatibilities.
            shaka.polyfill.installAll();

            // Check to see if the browser supports the basic APIs Shaka needs.
            if (shaka.Player.isBrowserSupported()) {
                // Everything looks good!
                initPlayer();
            } …
Run Code Online (Sandbox Code Playgroud)

drm mpeg-dash

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

如何通过 ffmpeg 生成多速率 mpeg-dash 流

我想创建多比特率的破折号流并提供它。我还想使用 dash.js 播放器的质量选择器。像图片:

dash.js 播放器质量选择器 生成 .mpd 文件需要哪些标志和配置?

ffmpeg video-streaming mpeg-dash dash.js

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

Shaka 打包器不加密资产

我只是无法弄清楚 shaka 播放器如何能够解密我的 CENC 保护内容,即使我在播放器配置中提供了无效的解密密钥。

player.configure({
    drm: {
      clearKeys: {
        '6FepeJBbmaiozSMs18vPfA==': '6FepeJBbmaiozSMs18vPfA==', // ==> invalid key
        '6FepeJBbmaiozSMs18vPfA==': '6FepeJBbmaiozSMs18vPfA==', // ==> invalid key
      }
    }
  })   
Run Code Online (Sandbox Code Playgroud)

这是给打包程序的参数

packager in=video-SD.webm,stream=audio,output=protected_audio.webm,drm_label=AUDIO in=video-HD.
webm,stream=video,output=protected_video_HD.webm,drm_label=HD in=video-SD.webm,stream=video,output=prote
cted_video_SD.webm,drm_label=SD  --enable_raw_key_encryption --enable_raw_key_decryption  \

--keys label=AUDIO:key_id=f3c5e0361e6654b28f8049c778b23946:key=a4631a153a443df9eed0593043db7519, label=SD:key_id=abba271e8bcf552bbd2e86a434a9a5d9:key=69eaa802a6763af979e8d1940fb88392,label=HD:key_id=abba271e8bcf552bbd2e86a434a9a5d9:key=69eaa802a6763af979e8d1940fb88392  \

--base_urls https://s3-eu-west-1.amazonaws.com/dash/ \
--mpd_output h264.mpd
Run Code Online (Sandbox Code Playgroud)

mpd 文件看起来像

<?xml version="1.0" encoding="UTF-8"?>
<!--Generated with https://github.com/google/shaka-packager version 72c4797-release-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT5.539000034332275S">
  <BaseURL>https://s3-eu-west-1.amazonaws.com/dash/</BaseURL>
  <Period id="0">
    <AdaptationSet id="0" contentType="audio" lang="en" subsegmentAlignment="true">
      <ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b" cenc:default_KID="f3c5e036-1e66-54b2-8f80-49c778b23946">
        <cenc:pssh>AAAAVHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAPzxeA2HmZUso+AScd4sjlGq7onHovPVSu9LoakNKml2au6Jx6Lz1UrvS6GpDSppdkAAAAA</cenc:pssh>
      </ContentProtection>
      <Representation id="0" bandwidth="96897" …
Run Code Online (Sandbox Code Playgroud)

drm widevine mpeg-dash shaka eme

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

为什么 MP4/AVC 容器文件中指定多个时间刻度?

我当前正在解析 MPEG-DASH 流初始化段(由 FFMPEG 生成),我注意到时间刻度是在我的文件中的多个不同位置指定的:

  • 在电影标题框中(mvhd):1000
  • 在我的视频轨道(mdhd)的媒体标题框中:15360
  • 在 AVC 配置框 (avcC) 中,更准确地说,在序列参数集的 VUI 部分中 NAL 单位:60

为什么在这么多不同的地方指定它?为什么他们有不同的价值观?这些价值有等级吗?例如,60 是否会覆盖 15360,15360 是否会覆盖 1000?

这是我用来生成我正在查看的文件的命令:

ffmpeg -f v4l2 -pixel_format yuyv422 -vcodec rawvideo -framerate 30 -video_size 640x360 -i /dev/video0 \
        -f dash -remove_at_exit false -use_template true -use_timeline true -streaming true -window_size 5 -extra_window_size 5 -seg_duration 5 -vcodec libx264 -b:v 1M -maxrate 1M -bufsize 2M  -pix_fmt yuv420p -r 30 -s 640x360 -aspect 16:9 /var/www/html/media/live.mpd
Run Code Online (Sandbox Code Playgroud)

mp4 ffmpeg timing video-streaming mpeg-dash

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