2015-01-15 8 views
7

Buduję małą aplikację, która używa MediaRecoder API, aby podzielić nagranie wideo z kamery internetowej i załadować całą część na serwer.
Widzę, że z Media Source API, muszę zagrać w pierwszą część, a następnie zagrać w dowolną inną część.Jak wygenerować segment inicjalizacji wideo webowego do użycia z Media Source API

Zgodnie z http://www.w3.org/TR/media-source/#examples potrzebuję "Segmentu inicjalizacji" na początku pliku.

W jaki sposób mogę wygenerować "Segment inicjalizacji" WebM w JS, aby móc grać dowolną wybraną przeze mnie część. Czy jest na to jakaś libacja? (Mam żadnej wiedzy o formacie WebM bajtów strumienia)

+0

powitania @nvcnvn! każdy postęp z tematem? Generuję strumień vp8 do portu udp i mój mały serwer do udp-> websockets. Nie wiem także, jaki rodzaj segmentu inicjalizacyjnego powinienem dostarczyć i jak go wygenerować. – zarkone

+1

@Zarkone, Zauważyłem, że jest to "ślepy zaułek" dla mojego projektu, MediaRecoder nie rozdziela wideo na części tonowe, które może grać, to po prostu proste dzielenie thevideo na części bajtów. Nie ma możliwości ponownego odtworzenia tych części za pomocą źródła Media – nvcnvn

Odpowiedz

2

trzeba używać rozszerzeń Source Media

Proszę zapoznać się poniżej przykład

<script> 
    var appendID = "123"; 

    function onOpen(e) { 
    var video = e.target; 

    var headers = GetStreamHeaders(); 

    if (headers == null) { 
     // Error fetching headers. Signal end of stream with an error. 
     video.sourceEndOfStream(HTMLMediaElement.EOS_NETWORK_ERR); 
    } 

    video.sourceAddId(appendID, 'video/webm; codecs="vorbis,vp8"'); 

    // Append the stream headers (i.e. WebM Header, Info, and Tracks elements) 
    video.sourceAppend(appendID, headers); 

    // Append some initial media data. 
    video.sourceAppend(appendID, GetNextCluster()); 
    } 

    function onSeeking(e) { 
    var video = e.target; 

    // Abort current segment append. 
    video.sourceAbort(appendID); 

    // Notify the cluster loading code to start fetching data at the 
    // new playback position. 
    SeekToClusterAt(video.currentTime); 

    // Append clusters from the new playback position. 
    video.sourceAppend(appendID, GetNextCluster()); 
    video.sourceAppend(appendID, GetNextCluster()); 
    } 

    function onProgress(e) { 
    var video = e.target; 

    if (video.sourceState == video.SOURCE_ENDED) 
     return; 

    // If we have run out of stream data, then signal end of stream. 
    if (!HaveMoreClusters()) { 
     video.sourceEndOfStream(HTMLMediaElement.EOS_NO_ERROR); 
     return; 
    } 

    video.sourceAppend(appendID, GetNextCluster()); 
    } 

    var video = document.getElementById('v'); 
    video.addEventListener('sourceopen', onOpen); 
    video.addEventListener('seeking', onSeeking); 
    video.addEventListener('progress', onProgress); 
</script> 


<video id="v" autoplay> </video> 

<script> 
    var video = document.getElementById('v'); 
    video.src = video.mediaSourceURL; 
</script> 
+1

Jak można zatem zastosować funkcję "GetStreamHeaders"? Zauważ, że moje pytanie dotyczy generowania nagłówka przez javascript! – nvcnvn

+0

@ nvcvn, nie jest możliwe zrobienie takiej personalizacji dla GetStreamHeaders za pomocą JavaScript po stronie klienta, więc musisz polegać na rzeczach po stronie serwera. Możesz odwoływać się do linków wiki dla tego samego używając PHP na https://gerrit.wikimedia.org/r/#/c/34560/1/includes/filerepo/file/File.php – Mazzu

Powiązane problemy