Ich habe die folgenden 2 in Python geschriebenen Methoden, die für .m3u8 Playlist -Dateien implementiert wurden. /> Machen Sie ein Feed Manifest. Eventual gewünscht ist es, 4 Methoden zu haben: 2 oben für .m3u8 und 2 für .mpd Manifest -Datei. Playlist-Dateien
https://github.com/globocom/m3u8
Ich werde durchsucht, um eine ähnliche Implementierung für .mpd (MPEG-) zu finden (MPEG- Dash) Manifest-Dateien, aber alles, was ich gefunden habe, waren Parser wie Folgendes:
https://github.com/sangwonl/python-mpegdash
https : //github.com/avishaycohen/mpd-parser
Alle Hilfe bei der Implementierung der beiden Methoden, um .MPD-Dateien zu ermöglichen und genau die gleichen Dinge zu erledigen, die die beiden Methoden durchführen. < /p>
import logging
from datetime import timedelta
from os.path import basename
from furl import furl
from m3u8 import M3U8, Media, Playlist, Segment
from m3u8 import load as load_m3u8
def make_master_manifest(request, stream):
if stream.info:
bandwidth = int(stream.info["bw_out"])
width = stream.info["meta"]["video"]["width"]
height = stream.info["meta"]["video"]["height"]
stream_info = {
"bandwidth": bandwidth,
"resolution": f"{width}x{height}",
"codecs": "avc1.640028,mp4a.40.2",
}
else:
stream_info = {"bandwidth": 1000}
p = Playlist(basename(stream.index_manifest_url), stream_info, None, None)
m = M3U8()
m.add_playlist(p)
for feed in stream.feeds.all():
media = Media(
type="SUBTITLES",
group_id="feeds",
name=f"feed-{feed.uuid}",
language="en",
default="YES",
autoselect="YES",
uri=furl(feed.manifest_url).set({"stream": stream.uuid}).url,
)
p.media.append(media)
m.add_media(media)
return m.dumps()
def make_feed_manifest(request, stream, feed):
url = request.build_absolute_uri(stream.index_manifest_url)
p = load_m3u8(url)
m = M3U8()
m.version = p.version
m.target_duration = p.target_duration
m.media_sequence = p.media_sequence
for s in p.segments:
if not m.program_date_time:
m.program_date_time = s.current_program_date_time
vtt_url = furl(basename(feed.webvtt_url)).set({"stream": stream.uuid})
if s.current_program_date_time:
vtt_url.args.update(
{
"start": s.current_program_date_time.isoformat(),
"end": (
s.current_program_date_time + timedelta(seconds=s.duration)
).isoformat(),
"epoch": stream.started_at.isoformat(),
}
)
v = Segment(
base_uri=vtt_url.url,
uri=vtt_url.url,
duration=s.duration,
discontinuity=s.discontinuity,
program_date_time=s.current_program_date_time,
)
m.add_segment(v)
return m.dumps()
< /code>
Hilfe geschätzt. < /p>
Hinweis. Die oben genannten Methoden werden für .M3U8 -Playlist -Dateien erstellt. Ich habe versucht, eine ähnliche Logik für eine .mpd -Datei zu verwenden, dies jedoch mithilfe vorhandener Paketparsers nicht zu tun hat. Die Pakete haben nur Parser, aber keine Methoden wie die im oben aufgeführten M3U8 -Paket. Ich hoffe, dass Stack -Benutzer mir helfen könnten, ähnlich den beiden Methoden für eine .mpd -Manifestdatei als Eingabe zu implementieren.
Implementierung von MPEG-Daash (.MPD) Ähnlich wie meine vorhandenen Methoden, die derzeit für .m3u8 geschrieben wurden ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post