我希望有人可以帮助解决这个问题,过去 2 天一直在寻找解决方案。
简而言之:我正在尝试制作一个简单的 qt5.7 应用程序,它将流式传输 m3u8(使用 Qt Creator(社区)。但是当我尝试运行它时,我得到了一个
Warning: "No decoder available for type 'application/x-hls'."
Error: "Your GStreamer installation is missing a plug-in."
Run Code Online (Sandbox Code Playgroud)
“gst-inspect | grep hls”返回:typefindfunctions:application/x-hls:m3u8
在这一点上,我不知道我什至会错过哪个插件,因为我已经浏览了完整的 GStreamer 插件列表并一个接一个地放置。就我的搜索而言,有些人通过安装坏/丑陋的插件得到了修复。有人说 QT5 仍然使用 gstreamer0.10,但新的 linux 版本使用 1.0(此时已丢失)。我试图设置一个标志来强制 GST_VERSION=1.0,没有工作,或者我做错了什么(我使用了 qmake GST_VERSION=1.0 命令)。另外,我可以在 vlc 中播放视频。我完全卡住了,不知道该怎么办了。
应用程序代码:
import QtQuick 2.7
import QtQuick.Window 2.2
import QtMultimedia 5.7
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Item {
width: 640
height: 480
MediaPlayer {
id: player
source: "http://playertest.longtailvideo.com/adaptive/wowzaid3/chunklist_w249832652.m3u8"
}
VideoOutput {
anchors.fill: …Run Code Online (Sandbox Code Playgroud) 我正在尝试ffmpeg将mp4文件转换HLS为master playlist.
我设法让它创建index_vtt.m3u8包含字幕的文件,但它不想将流添加到master playlist. 我是新手,所以我不完全理解整个 ffmpeg 是如何工作的(我主要只是尝试我在网上找到的一堆资源)
我正在使用以下命令:
../ffmpeg-4.2.1/ffmpeg -i ../input.mp4 -i ../subtitile.vtt -c:s webvtt -profile:v baseline -level 21 -s 1280x720 -start_number 0 -hls_playlist_type vod -hls_time 10 -hls_list_size 3 -f hls -master_pl_name master.m3u8 index.m3u8`
Run Code Online (Sandbox Code Playgroud)
它产生 master.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=140800,RESOLUTION=1280x720,CODECS="avc1.42c015,mp4a.40.2"
index.m3u8
Run Code Online (Sandbox Code Playgroud)
我可以在 vlc 中播放它,但它无法识别任何字幕。然后我修改master.m3u8它看起来像这样:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="index_vtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="hr",NAME="Croatian",AUTOSELECT=YES
#EXT-X-STREAM-INF:BANDWIDTH=140800,RESOLUTION=1280x720,CODECS="avc1.42c01e,mp4a.40.2",SUBTITLES="default-text-group"
index.m3u8
Run Code Online (Sandbox Code Playgroud)
一切都很好。我怎么能告诉ffmpeg我为我做这件事?