是否存在诸如“audio/*”和“video/*”之类的所有音频和视频的 MIME 类型?

Posted

技术标签:

【中文标题】是否存在诸如“audio/*”和“video/*”之类的所有音频和视频的 MIME 类型?【英文标题】:Is there such thing as a MIME type for all audio and video like "audio/*" and "video/*"? 【发布时间】:2016-07-21 19:36:56 【问题描述】:

我正在编写一个应用程序,在该应用程序中,通过拖放操作,我只想接受音频和视频类型。

这是 Qt5 中用于放置小部件的代码:

void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)

    if (frame_type == FRAME_TYPE::DROPPABLE)
    
        if (evt->mimeData()->hasFormat("audio/*"))
        
            evt->acceptProposedAction();
        
        else
            evt->ignore();
    
    else
        evt->ignore();

但“音频/*”不起作用。小部件不接受任何文件。我是否必须“if-else”所有可能的音频和视频 MIME 类型,还是有其他更快的解决方案?

【问题讨论】:

【参考方案1】:

不,没有这样的通用 MIME 类型。

evt 会告诉您它拥有的特定 MIME 类型。您可以进行子字符串/模式匹配以查看是否有任何类型与您要查找的内容匹配,例如:

void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)

    if (frame_type == FRAME_TYPE::DROPPABLE)
    
        QStringList formats = evt->mimeData()->formats();
        if (!formats.filter("audio/").empty() ||
            !formats.filter("video/").empty())
        
            evt->acceptProposedAction();
            return;
        
    

    evt->ignore();

或者:

void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)

    if (frame_type == FRAME_TYPE::DROPPABLE)
    
        QRegExp regex("\\b(audio|video)/*", Qt::CaseInsensitive, QRegExp::Wildcard);
        if (!evt->mimeData()->formats().filter(regex).empty())
        
            evt->acceptProposedAction();
            return;
        
    

    evt->ignore();

【讨论】:

【参考方案2】:

QMimeData::hasFormat 不处理任何类型的通配符。它只是检查您指定的 mimetype 是否按原样存在于支持的格式列表中(请参阅the implementation)。

您需要获取支持的formats() 列表并在其中搜索以audio/video/ 开头的任何字符串。

【讨论】:

以上是关于是否存在诸如“audio/*”和“video/*”之类的所有音频和视频的 MIME 类型?的主要内容,如果未能解决你的问题,请参考以下文章

audio元素和video元素在ios和andriod中无法自动播放的情况下,怎么应对?

H5学习系列之Audio和Video

HTML5中audio标签的使用

HTML5中 video和audio这两个标签是干嘛的,如何设置其属性?

Video和Audio标签的使用

video和audio