You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Tuesday, September 20th 2011, 11:57am

Faststart QT Movie

Hallo,

Wird wahr. kein reines PHP Problem sein...
es wird aktuell eine Mechanik genutzt die über ffmpeg,qtmetadata und qt-faststart Chapter in ein Moviefile hineinschreibt, soweit ist das ja kein Problem. Allerdings spielen diese nicht ab im Webbrowser, sondern laden erst komplett.
Bisher funktionierte das, erst als die Chaptermarks dazu kamen gab es Probleme, das Hauptzeil besteht darin für das iPhone/iPad Chaptermark Support zu gewährleisten was soweit auch klappt, aber dabei hat es den PreLoad oder Autoplay auf PC/Mac Plattformen zerschossen.

Apple QuickTime Reference zum File Format Aufbau:
http://developer.apple.com/library/mac/#…00939-CH204-SW1

Die Atoms im Movie File sehen so aus:
ftypqt -> moov und mdat
(http://multimedia.cx/eggs/improving-qt-faststart/)
Allerdings schreibt qtmetadata den "Text-Track" der Chapter ganz am ende des Files. Während er im moov Header scheinbar darauf referenziert. Ich vermute das er eben erst das ganze File durchliest bevor mit Spielen anfängt.
Hier z.b. die Text Strings:

....(4byte size wide)
wide (4byte)
....(4 byte size mdat)
mdat (4byte)
..(2byte string length)
Erster Chaptertext!
..(2byte string length)
Zweiter Chaptertext!
...
...

Das chap Atom enthält, soweit ich gesehen habe die Anzahl der "marks".

-----

Im PHP Skript auf der Seite wird das ganze dann quasi so ausgelesen, die Punkte stehen für Filler Content:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
...	
header('Content-Type: video/quicktime');
header('Cache-Control: private, must-revalidate');
header('Pragma: private');
header('Content-Disposition: inline; file_name='.basename($filepath).';');
$moviefile = fopen($filepath,'rb');
...
...
if(isset($_SERVER['HTTP_RANGE']))
{
...
...
	$range = substr($_SERVER['HTTP_RANGE'],strlen('bytes='));
	$split = explode('-',$range);
	if ($seek_start > 0 || $seek_end < $filesize)
        {
            header('HTTP/1.1 206 Partial Content');
            header('Status: 206 Partial Content'); 
        }
	$remaining_bytes = $seek_end-$seek_start+1;
        header('Accept-Ranges: bytes');
        header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$filesize);
	header('Content-Length: '.$remaining_bytes);
       ...
       while($remaining_bytes > 0)
       {
               $chunk_size = ( $remaining_bytes < QTPLAY_BUFFERSIZE ? $remaining_bytes : QTPLAY_BUFFERSIZE );
               echo fread($moviefile, $chunk_size); 
               flush();
               ob_flush();
               $remaining_bytes -= $chunk_size;
       }
}
 else
{
	 header('Content-Length: ' .$filesize );
	 session_write_close();
	 usleep(1000);
	 ob_flush();
	 flush();
	while(!feof($moviefile) && ( connection_status()==0) && !connection_aborted() ) {
            print(fread($moviefile, 1024*8));
            flush();
        }
}
 fclose($moviefile);



Wäre für Hilfe dankbar und hoffe es kennt sich jemand damit aus.

Viele Grüße
lspy

2

Thursday, September 22nd 2011, 3:54pm

Also der PHP Code hat schonmal funktioniert. Dann hast du Chaptermarks in die Moviedatei hinzugefügt. Diese werden irgendwie in den Movie-Container geschrieben? Dann ging nichts mehr. Den PHP Code hast du aber nicht bearbeitet? Und auch sonstiges hast du nicht verändert? client timeout, php execution time und sonstiges kann man ausschließen?

Gibt es denn andere Player mit denen du die Datei wiedergeben kannst?
Habe die Format Specs nur überflogen, ist schon ein ziemlich spezielles Problem - mit Chaptermarks habe ich noch nie gearbeitet.

3

Friday, September 23rd 2011, 1:05pm

Auch über das ganz normale Embbed,object klappt das so nicht, mit dem JWPlayer gibt es vielleicht einen alternativen weg.
Allerdings ist Flash vorerst ein no-go, damit würde es aber vermutlich gehen, wobei es hier wahrscheinlich trotzdem auf Filespezifikationen ankommt.

http://www.longtailvideo.com/support/jw-…seudo-streaming
http://www.longtailvideo.com/support/jw-…chapter-markers
---

Es noch alles in der Forschung bzw. in der Probierphase...., sollte sich hier keine Antwort finden, melde ich mich, wenn es eine Lösung oder Alternative gibt.

Similar threads

Social bookmarks