当前位置: 首页 > 知识库问答 >
问题:

MPEG-DASH——多路复用表示问题

史昊焱
2023-03-14

我试图学习ffmpeg、MP4Box和MPEG-DASH,但我遇到了一个问题。我用的是mp4。我使用ffmpeg通过以下命令对mp4进行解复用:

ffmpeg -i test.mp4 -c:v copy -g 72 -an video.mp4 -c:a copy audio.mp4

创建这两个文件后,我使用MP4Box使用以下命令为dash player分割文件:

MP4Box -dash 4000 -frag 1000 -rap -segment-name segment_ output.mp4

它确实创建了我认为我需要的所有文件。然后我将播放器指向output_dash.mpd,除了控制台中的大量消息外,什么也没发生:

[8] EME detected on this user agent! (ProtectionModel_21Jan2015) 
[11] Playback Initialized 
[21] [dash.js 2.3.0] MediaPlayer has been initialized 
[64] Parsing complete: ( xml2json: 3.42ms, objectiron: 2.61ms, total: 0.00603s) 
[65] Manifest has been refreshed at Wed Apr 12 2017 12:16:52 GMT-0600 (MDT)[1492021012.196]  
[72] MediaSource attached to element.  Waiting on open... 
[77] MediaSource is open! 
[77] Duration successfully set to: 148.34 
[78] Added 0 inline events 
[78] No video data. 
[79] No audio data. 
[79] No text data. 
[79] No fragmentedText data. 
[79] No embeddedText data. 
[80] Multiplexed representations are intentionally not supported, as they are not compliant with the DASH-AVC/264 guidelines 
[81] No streams to play.

以下是我正在使用的视频的MP4Box信息:

* Movie Info *
    Timescale 1000 - Duration 00:02:28.336
    Fragmented File no - 2 track(s)
    File suitable for progressive download (moov before mdat)
    File Brand mp42 - version 512
    Created: GMT Wed Feb  6 06:28:16 2036

File has root IOD (9 bytes)
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: Not part of MPEG-4 Visual profiles (0xfe)
Audio PL: Not part of MPEG-4 audio profiles (0xfe)
No streams included in root OD

iTunes Info:
    Name: Rogue One - A Star Wars Story
    Artist: Lucasfilm
    Genre: Trailer
    Created: 2016
    Encoder Software: HandBrake 0.10.2 2015060900
    Cover Art: JPEG File

Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 00:02:28.335
Media Info: Language "Undetermined" - Type "vide:avc1" - 3552 samples
Visual Track layout: x=0 y=0 width=1920 height=816
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 1920 x 816
    AVC Info: 1 SPS - 1 PPS - Profile High @ Level 4.1
    NAL Unit length bits: 32
    Pixel Aspect Ratio 1:1 - Indicated track size 1920 x 816
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 44100 - Duration 00:02:28.305
Media Info: Language "English" - Type "soun:mp4a" - 6387 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 44100
Synchronized on stream 1
Alternate Group ID 1

我知道我需要分离视频和音频,我想这就是我的问题所在。我使用的命令可能没有做正确的事情。

有更好的命令来解复用我的mp4吗?我使用的MP4Box命令是分割文件的最佳方法吗?如果我使用不同的文件,它们是否总是需要解组?

有一点要提一下,如果我使用以下命令,一切都很好,但是没有音频,因为-an意味着它只是视频:

ffmpeg -i test.mp4 -c:v copy -g 72 -an output.mp4

MP4Box -dash 4000 -frag 1000 -rap -segment-name segment_ output.mp4

使现代化

我注意到视频没有音频流,但音频有视频流,这就是为什么我得到了mux错误。我认为这可能是一个问题,所以我运行了这个命令,以防止输出中出现不需要的流:

ffmpeg -i test.mp4 -c:v copy -g 72 -an video.mp4 -c:a copy -vn audio.mp4

然后我跑:

MP4Box -dash 4000 -frag 1000 -rap -segment-name segment_ video.mp4 audio.mp4

现在我再也不明白了,多路复用的表示法是故意不支持的。。。信息,但现在我得到:

[122] Video Element Error: MEDIA_ERR_SRC_NOT_SUPPORTED 
[123] [object MediaError] 
[125] Schedule controller stopping for audio 
[126] Caught pending play exception - continuing (NotSupportedError: Failed to load because no supported source was found.)

我试着通过Chrome独立播放视频和音频,它们都有效,只是不通过仪表板播放器。呃,这很痛苦,但我觉得我正在进步。

共有2个答案

袁运锋
2023-03-14

你没有使用好的个人资料。考虑到日志,我想你用的是dash if播放器。在这种情况下,您需要使用以下命令:

MP4Box-dash 4000-frag 1000-profile dashavc264:onDemand-rap-segment name段输出。mp4

凌俊名
2023-03-14

我最后选择了便当。我不知道为什么我不能让MP4Box工作,但Bento4工作非常简单,让我在几个小时内起床并开始工作。

 类似资料:
  • 我一直在尝试学习MP4Box和Dash,我正在取得一些进展,但我似乎无法让我的视频正常工作。我按照将播放器添加到一个简单的html页面的说明进行了操作,并用它测试了Dash测试页面中的已知MPD,并且播放器的一切都很完美,所以我缩小了MPD文件的范围。 我通过Dash验证器运行了我的MPD文件,但它失败了。我得到以下错误: 我正在使用MP4Box来分割mp4,所以这可能是一个错误的命令。我用的是这

  • 我正在尝试实施Android应用程序来播放受小程序保护的视频。我在Exoplayer上构建我的应用程序,但我对有问题。 我有这个异常。我发现这个异常被抛出在这行代码中: 方法的所有参数都设置正确,但调用此方法失败,并引发上述异常。 你知道我该怎么解决吗?谢谢你的帮助。

  • 我对碎片化mp4的理解是它是一个文件,但内部它是以片段的形式构建的。有人能向我解释一下如何在DASH的. mpd文件中处理这些片段吗?我看到的. mpd文件似乎使用单独的url处理不同的段,但我想碎片化mp4必须通过字节偏移量来处理同一个url。那么浏览器如何知道什么时间对应于什么字节范围?

  • 我正在写关于流媒体直播的论文。我使用了ffmpeg、带有rtmp模块和dash的ngix服务器。来自Dash industry的js。我通过ffmpeg启动流到服务器,并通过dash播放,播放器运行良好,但存在一些问题。 仅当mpd dash play list仍有chunk t=0时,玩家才能玩,所以每当用户请求玩家和*。mpd已更新,但块t=0玩家不运行。 我上传我的*。mpd文件发送到Das

  • 帮助我不会显示比特率<玩家。getBitrateInfoListFor(“视频”);仅显示一个比特率-454948 显示GPAC生成的mpd 游戏者getBitrateInfoListFor(“视频”);仅显示一个比特率-454948

  • 我想用多比特率创建破折号流,并为它服务。我还想使用dash.js播放器的质量选择器。如图所示: