正在显示
5 个修改的文件
包含
65 行增加
和
13 行删除
trunk/research/golang/fwriter.go
0 → 100644
| 1 | +package main | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "os" | ||
| 6 | + "io" | ||
| 7 | + "net/http" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +func main() { | ||
| 11 | + fmt.Println("FileWriter web server, post to /api/v1/flv to temp.flv") | ||
| 12 | + http.HandleFunc("/api/v1/flv", func(w http.ResponseWriter, r *http.Request){ | ||
| 13 | + defer r.Body.Close() | ||
| 14 | + | ||
| 15 | + var f *os.File | ||
| 16 | + var err error | ||
| 17 | + if f,err = os.OpenFile("temp.flv", os.O_RDWR|os.O_APPEND|os.O_CREATE, os.ModePerm); err != nil { | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + var written int64 | ||
| 22 | + written,err = io.Copy(f, r.Body) | ||
| 23 | + fmt.Println(fmt.Sprintf("write to file temp.flv, %v bytes", written)) | ||
| 24 | + | ||
| 25 | + if err != nil { | ||
| 26 | + return | ||
| 27 | + } | ||
| 28 | + }) | ||
| 29 | + _ = http.ListenAndServe(fmt.Sprintf(":8088"), nil) | ||
| 30 | +} |
| @@ -564,7 +564,7 @@ | @@ -564,7 +564,7 @@ | ||
| 564 | $("#main_modal").on("hide", function(){ | 564 | $("#main_modal").on("hide", function(){ |
| 565 | if (srs_player) { | 565 | if (srs_player) { |
| 566 | // report the log to backend. | 566 | // report the log to backend. |
| 567 | - console.log(srs_player.dump_log()); | 567 | + //console.log(srs_player.dump_log()); |
| 568 | 568 | ||
| 569 | srs_player.stop(); | 569 | srs_player.stop(); |
| 570 | srs_player = null; | 570 | srs_player = null; |
| @@ -155,7 +155,7 @@ package | @@ -155,7 +155,7 @@ package | ||
| 155 | nb_parsed += each_parse; | 155 | nb_parsed += each_parse; |
| 156 | 156 | ||
| 157 | if (nb_parsed < ts_packets) { | 157 | if (nb_parsed < ts_packets) { |
| 158 | - flash.utils.setTimeout(aysncParse, 80); | 158 | + flash.utils.setTimeout(aysncParse, Consts.TsParseAsyncInterval); |
| 159 | return; | 159 | return; |
| 160 | } | 160 | } |
| 161 | 161 |
| @@ -16,7 +16,10 @@ package | @@ -16,7 +16,10 @@ package | ||
| 16 | import flash.net.NetConnection; | 16 | import flash.net.NetConnection; |
| 17 | import flash.net.NetStream; | 17 | import flash.net.NetStream; |
| 18 | import flash.net.NetStreamAppendBytesAction; | 18 | import flash.net.NetStreamAppendBytesAction; |
| 19 | + import flash.net.URLLoader; | ||
| 20 | + import flash.net.URLLoaderDataFormat; | ||
| 19 | import flash.net.URLRequest; | 21 | import flash.net.URLRequest; |
| 22 | + import flash.net.URLRequestMethod; | ||
| 20 | import flash.net.URLStream; | 23 | import flash.net.URLStream; |
| 21 | import flash.net.URLVariables; | 24 | import flash.net.URLVariables; |
| 22 | import flash.system.Security; | 25 | import flash.system.Security; |
| @@ -46,12 +49,8 @@ package | @@ -46,12 +49,8 @@ package | ||
| 46 | private var hls:Hls = null; // parse m3u8 and ts | 49 | private var hls:Hls = null; // parse m3u8 and ts |
| 47 | 50 | ||
| 48 | // callback for hls. | 51 | // callback for hls. |
| 49 | - private var shok:Boolean = false; | ||
| 50 | public var flvHeader:ByteArray = null; | 52 | public var flvHeader:ByteArray = null; |
| 51 | public function onSequenceHeader():void { | 53 | public function onSequenceHeader():void { |
| 52 | - if (shok) { | ||
| 53 | - return; | ||
| 54 | - } | ||
| 55 | if (!media_stream) { | 54 | if (!media_stream) { |
| 56 | setTimeout(onSequenceHeader, 1000); | 55 | setTimeout(onSequenceHeader, 1000); |
| 57 | return; | 56 | return; |
| @@ -61,16 +60,30 @@ package | @@ -61,16 +60,30 @@ package | ||
| 61 | s.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); | 60 | s.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); |
| 62 | s.appendBytes(flvHeader); | 61 | s.appendBytes(flvHeader); |
| 63 | log("FLV: sps/pps " + flvHeader.length + " bytes"); | 62 | log("FLV: sps/pps " + flvHeader.length + " bytes"); |
| 64 | - shok = true; | 63 | + |
| 64 | + writeFlv(flvHeader); | ||
| 65 | } | 65 | } |
| 66 | - public function onFlvBody(flv:ByteArray):void { | 66 | + public function onFlvBody(uri:String, flv:ByteArray):void { |
| 67 | if (!media_stream) { | 67 | if (!media_stream) { |
| 68 | return; | 68 | return; |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | var s:NetStream = media_stream; | 71 | var s:NetStream = media_stream; |
| 72 | s.appendBytes(flv); | 72 | s.appendBytes(flv); |
| 73 | - log("FLV: AV " + flv.length + " bytes"); | 73 | + log("FLV: ts " + uri + " parsed to flv " + flv.length + " bytes"); |
| 74 | + | ||
| 75 | + writeFlv(flv); | ||
| 76 | + } | ||
| 77 | + private function writeFlv(data:ByteArray):void { | ||
| 78 | + return; | ||
| 79 | + | ||
| 80 | + var r:URLRequest = new URLRequest("http://192.168.1.117:8088/api/v1/flv"); | ||
| 81 | + r.method = URLRequestMethod.POST; | ||
| 82 | + r.data = data; | ||
| 83 | + | ||
| 84 | + var pf:URLLoader = new URLLoader(); | ||
| 85 | + pf.dataFormat = URLLoaderDataFormat.BINARY; | ||
| 86 | + pf.load(r); | ||
| 74 | } | 87 | } |
| 75 | 88 | ||
| 76 | public function M3u8Player(o:srs_player) { | 89 | public function M3u8Player(o:srs_player) { |
| @@ -178,7 +191,7 @@ package | @@ -178,7 +191,7 @@ package | ||
| 178 | if (parsed_ts_seq_no >= hls.seq_no + hls.tsCount) { | 191 | if (parsed_ts_seq_no >= hls.seq_no + hls.tsCount) { |
| 179 | var to:Number = 1000; | 192 | var to:Number = 1000; |
| 180 | if (hls.tsCount > 0) { | 193 | if (hls.tsCount > 0) { |
| 181 | - to = hls.duration * 1000 / hls.tsCount * 0.5; | 194 | + to = hls.duration * 1000 / hls.tsCount * Consts.M3u8RefreshRatio; |
| 182 | } | 195 | } |
| 183 | setTimeout(refresh_m3u8, to); | 196 | setTimeout(refresh_m3u8, to); |
| 184 | log("m3u8 not changed, retry after " + to.toFixed(2) + "ms"); | 197 | log("m3u8 not changed, retry after " + to.toFixed(2) + "ms"); |
| @@ -208,8 +221,6 @@ package | @@ -208,8 +221,6 @@ package | ||
| 208 | 221 | ||
| 209 | download(uri, function(stream:ByteArray):void{ | 222 | download(uri, function(stream:ByteArray):void{ |
| 210 | log("got ts seqno=" + parsed_ts_seq_no + ", " + stream.length + " bytes"); | 223 | log("got ts seqno=" + parsed_ts_seq_no + ", " + stream.length + " bytes"); |
| 211 | - // reset and start to parse this ts. | ||
| 212 | - hls.reset(); | ||
| 213 | 224 | ||
| 214 | var flv:FlvPiece = new FlvPiece(parsed_ts_seq_no); | 225 | var flv:FlvPiece = new FlvPiece(parsed_ts_seq_no); |
| 215 | var body:ByteArray = new ByteArray(); | 226 | var body:ByteArray = new ByteArray(); |
| @@ -217,7 +228,7 @@ package | @@ -217,7 +228,7 @@ package | ||
| 217 | hls.parseBodyAsync(flv, stream, body, function():void{ | 228 | hls.parseBodyAsync(flv, stream, body, function():void{ |
| 218 | body.position = 0; | 229 | body.position = 0; |
| 219 | //log("ts parsed, seqno=" + parsed_ts_seq_no + ", flv=" + body.length + "B"); | 230 | //log("ts parsed, seqno=" + parsed_ts_seq_no + ", flv=" + body.length + "B"); |
| 220 | - onFlvBody(body); | 231 | + onFlvBody(uri, body); |
| 221 | 232 | ||
| 222 | parsed_ts_seq_no++; | 233 | parsed_ts_seq_no++; |
| 223 | setTimeout(refresh_ts, 0); | 234 | setTimeout(refresh_ts, 0); |
-
请 注册 或 登录 后发表评论