Append Call function

This commit is contained in:
zhangpeihao
2015-05-04 11:34:52 +08:00
parent 9390a96013
commit 0c14de9bcf
2 changed files with 74 additions and 6 deletions

View File

@@ -46,7 +46,7 @@ type OutboundConn interface {
Send(message *Message) error Send(message *Message) error
// Calls a command or method on Flash Media Server // Calls a command or method on Flash Media Server
// or on an application server running Flash Remoting. // or on an application server running Flash Remoting.
Call(customParameters ...interface{}) (err error) Call(name string, customParameters ...interface{}) (err error)
// Get network connect instance // Get network connect instance
Conn() Conn Conn() Conn
} }
@@ -376,8 +376,41 @@ func (obConn *outboundConn) Send(message *Message) error {
// Calls a command or method on Flash Media Server // Calls a command or method on Flash Media Server
// or on an application server running Flash Remoting. // or on an application server running Flash Remoting.
func (obConn *outboundConn) Call(customParameters ...interface{}) (err error) { func (obConn *outboundConn) Call(name string, customParameters ...interface{}) (err error) {
return errors.New("Unimplemented") defer func() {
if r := recover(); r != nil {
err = r.(error)
if obConn.err == nil {
obConn.err = err
}
}
}()
// Create command
transactionID := obConn.conn.NewTransactionID()
cmd := &Command{
IsFlex: false,
Name: name,
TransactionID: transactionID,
Objects: make([]interface{}, 1+len(customParameters)),
}
cmd.Objects[0] = nil
for index, param := range customParameters {
cmd.Objects[index+1] = param
}
buf := new(bytes.Buffer)
err = cmd.Write(buf)
CheckError(err, "Call() Create command")
obConn.transactions[transactionID] = name
message := &Message{
ChunkStreamID: CS_ID_COMMAND,
Type: COMMAND_AMF0,
Size: uint32(buf.Len()),
Buf: buf,
}
message.Dump(name)
return obConn.conn.Send(message)
} }
// Get network connect instance // Get network connect instance

View File

@@ -47,6 +47,8 @@ type OutboundStream interface {
PublishVideoData(data []byte, deltaTimestamp uint32) error PublishVideoData(data []byte, deltaTimestamp uint32) error
// Publish data // Publish data
PublishData(dataType uint8, data []byte, deltaTimestamp uint32) error PublishData(dataType uint8, data []byte, deltaTimestamp uint32) error
// Call
Call(name string, customParameters ...interface{}) error
} }
// A publish stream // A publish stream
@@ -144,13 +146,11 @@ func (stream *outboundStream) Publish(streamName, howToPublish string) (err erro
func (stream *outboundStream) Play(streamName string, start, duration *uint32, reset *bool) (err error) { func (stream *outboundStream) Play(streamName string, start, duration *uint32, reset *bool) (err error) {
conn := stream.conn.Conn() conn := stream.conn.Conn()
// Keng-die: in stream transaction ID always been 0 // Keng-die: in stream transaction ID always been 0
// Get transaction ID
transactionID := conn.NewTransactionID()
// Create play command // Create play command
cmd := &Command{ cmd := &Command{
IsFlex: false, IsFlex: false,
Name: "play", Name: "play",
TransactionID: transactionID, TransactionID: 0,
Objects: make([]interface{}, 2), Objects: make([]interface{}, 2),
} }
cmd.Objects[0] = nil cmd.Objects[0] = nil
@@ -196,6 +196,41 @@ func (stream *outboundStream) Play(streamName string, start, duration *uint32, r
return nil return nil
} }
func (stream *outboundStream) Call(name string, customParameters ...interface{}) (err error) {
conn := stream.conn.Conn()
// Create play command
cmd := &Command{
IsFlex: false,
Name: name,
TransactionID: 0,
Objects: make([]interface{}, 1+len(customParameters)),
}
cmd.Objects[0] = nil
for index, param := range customParameters {
cmd.Objects[index+1] = param
}
// Construct message
message := NewMessage(stream.chunkStreamID, COMMAND_AMF0, stream.id, 0, nil)
if err = cmd.Write(message.Buf); err != nil {
return
}
message.Dump(name)
err = conn.Send(message)
if err != nil {
return
}
// Set Buffer Length
// Buffer length
if stream.bufferLength < MIN_BUFFER_LENGTH {
stream.bufferLength = MIN_BUFFER_LENGTH
}
stream.conn.Conn().SetStreamBufferSize(stream.id, stream.bufferLength)
return nil
}
func (stream *outboundStream) Received(message *Message) bool { func (stream *outboundStream) Received(message *Message) bool {
if message.Type == VIDEO_TYPE || message.Type == AUDIO_TYPE { if message.Type == VIDEO_TYPE || message.Type == AUDIO_TYPE {
return false return false