123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- importScripts(
- './H264SPSParser.js',
- './H264Session.js',
- );
- addEventListener('message', receiveMessage);
- let sdpInfo = null;
- let rtpSession = null;
- let videoCHID = -1;
- let videoRtpSessionsArray = [];
- function receiveMessage(event) {
- //console.log(event.data)
- var message = event.data;
- switch (message.type) {
- case 'sdpInfo':
- sdpInfo = message.data;
- initRTPSession(sdpInfo.sdpInfo);
- case 'rtpDataArray':
- //console.log(message.data.length)
- for (let num = 0; num < message.data.length; num++) {
- receiveMessage({
- 'type': 'rtpData',
- 'data': message.data[num],
- });
- }
- break;
- case 'rtpData':
- videoCHID = message.data.rtspInterleave[1];
- if (typeof videoRtpSessionsArray[videoCHID] !== "undefined") {
- videoRtpSessionsArray[videoCHID].remuxRTPData(message.data.rtspInterleave,
- message.data.header, message.data.payload);
- }else { // RTCP包
- //console.log('Interleave: ' + videoCHID);
- //console.log(message.data.rtspInterleave, message.data.header);
- //return;
- }
- break;
- }
- }
- function initRTPSession(sdpInfo) {
- for(let [i, len] = [0, sdpInfo.length]; i < len; i++) {
- if(sdpInfo[i].codecName === 'H264') {
- //console.log(sdpInfo)
- rtpSession = new H264Session();
- rtpSession.init();
- rtpSession.rtpSessionCallback = RtpReturnCallback;
- if(sdpInfo[i].Framerate) {
- rtpSession.setFrameRate(sdpInfo[i].Framerate);
- }
- }
- if(rtpSession !== null) {
- videoCHID = sdpInfo[i].RtpInterlevedID;
- videoRtpSessionsArray[videoCHID] = rtpSession;
- }
- }
- }
- function RtpReturnCallback(dataInfo) {
- if(dataInfo === null || dataInfo === undefined) {
- //console.log('数据为空')
- return;
- }
- let mediaData = dataInfo;
- if(mediaData.decodeMode === 'canvas') {
- sendMessage('YUVData', mediaData.frameData);
- return;
- }
- //console.log( mediaData.SEIInfo)
- if(mediaData.initSegmentData !== null && mediaData.initSegmentData !== undefined) {
- //sendMessage('codecInfo', mediaData.codecInfo)
- //sendMessage('initSegment', mediaData.initSegmentData);
- sendMessage('videoInit', mediaData);
- sendMessage('firstvideoTimeStamp', mediaData.timeStamp);
- }
- if(mediaData.SEIInfo !== null && mediaData.SEIInfo !== undefined) {//SEI信息
- sendMessage('SEI', mediaData.SEIInfo);
- }
- if (mediaData.frameData && mediaData.frameData.length > 0) {
- sendMessage('videoTimeStamp', mediaData.timeStamp);
- sendMessage('mediaSample', mediaData.mediaSample);
- //console.log(mediaData.frameData.length)
- sendMessage('videoRender', mediaData.frameData);
- }
- mediaData = null;
- }
- function sendMessage(type, data) {
- let event = {
- type: type,
- data: data
- }
- if(type === 'videoRender') {
- postMessage(event, [data.buffer]);
- }else {
- postMessage(event);
- }
- event = null;
- }
|