FFMPEG Mpeg-DASH 我们需要哪些属性选项和标志才能使 H264 可播放 .mpd 普遍可播放

问题描述

我想使用 h264 编解码器将任何来源编码为普遍可播放的 .mpd。

这是我的命令

/usr/bin/ffmpeg -re -i 1.webm -c:v libx264 -preset ultrafast 
-tune zerolatency -c:a aac -ac 2 -strict -2 -crf 18 -profile:v baseline 
-maxrate 1000k -pix_fmt yuv420p -flags -global_header -streaming 1 
-use_template 1 -use_timeline 0 -seg_duration 2 -remove_at_exit 1 
-f dash index.mpd

但是对于 dash.js,日志说

dash.js videoCodec (video/mp4;codecs="avc1") is not supported.

**额外注意:当使用 -c:v libx264 并在 HLS .m3u8 中输出时 --> 它适用于所有浏览器

带有 dash.js 的 HTML

<script src="http://cdn.dashjs.org/latest/dash.all.min.js"></script>
    <center><video width="90%" height="600" id="videoPlayer" controls=""
    src="" playsinline="true" preload="Metadata" ></video></center>
    <script>
    (function(){
        var url = "https://www.---domain--path-to.mpd";
        var player = dashjs.MediaPlayer().create();
        player.initialize(document.querySelector("#videoPlayer"),url,true);
player.updateSettings({
            streaming: {
                 lowLatencyEnabled: true,liveDelay: 4,liveCatchup: {
                    minDrift: 0.02,maxDrift: 0,playbackRate: 0.5,latencyThreshold: 60    
                  }
            }
        });
    })();     
    video = document.getElementById("videoPlayer");
    video.addEventListener("loadedMetadata",function(){ video.muted = true; video.play(); },false);
    </script>

我确实有“-c:v libx264”,但是为什么dash.js 看到avc1...我知道h264 有avc1,但是如何解决这个问题。是修复 ffmpeg 命令还是更改 javascript 中的 player.initialize

解决方法

video/mp4;codecs="avc1" 不是有效的编解码器字符串 - 它缺少 SourceBuffer 对此比特流类型所需的配置文件、约束和级别。

发生这种情况是因为您设置了 -flags -global_header。这会导致编解码器额外数据未设置,进而意味着 ffmpeg DASH 清单生成器无法生成正确的编解码器字符串。

删除 -flags -global_header,它应该可以正常工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...