mirror of
				https://github.com/pion/mediadevices.git
				synced 2025-10-30 11:26:29 +08:00 
			
		
		
		
	Reduce examples to increase maintainability
Changes: * Remove facedetection, rtp-send, and screenshare examples * Rename simple to webrtc
This commit is contained in:
		| @@ -1,119 +0,0 @@ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"image" | ||||
|  | ||||
| 	"github.com/pion/mediadevices" | ||||
| 	"github.com/pion/mediadevices/examples/internal/signal" | ||||
| 	"github.com/pion/mediadevices/pkg/codec" | ||||
| 	"github.com/pion/mediadevices/pkg/codec/vpx"       // This is required to use VP8/VP9 video encoder | ||||
| 	_ "github.com/pion/mediadevices/pkg/driver/camera" // This is required to register camera adapter | ||||
| 	"github.com/pion/mediadevices/pkg/frame" | ||||
| 	"github.com/pion/mediadevices/pkg/io/video" | ||||
| 	"github.com/pion/mediadevices/pkg/prop" | ||||
| 	"github.com/pion/webrtc/v2" | ||||
| ) | ||||
|  | ||||
| func markFacesTransformer(r video.Reader) video.Reader { | ||||
| 	return video.ReaderFunc(func() (img image.Image, err error) { | ||||
| 		img, err = r.Read() | ||||
| 		if err != nil { | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		img = markFaces(img) | ||||
| 		return | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func main() { | ||||
| 	config := webrtc.Configuration{ | ||||
| 		ICEServers: []webrtc.ICEServer{ | ||||
| 			{ | ||||
| 				URLs: []string{"stun:stun.l.google.com:19302"}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	// Wait for the offer to be pasted | ||||
| 	offer := webrtc.SessionDescription{} | ||||
| 	signal.Decode(signal.MustReadStdin(), &offer) | ||||
|  | ||||
| 	// Create a new RTCPeerConnection | ||||
| 	mediaEngine := webrtc.MediaEngine{} | ||||
| 	if err := mediaEngine.PopulateFromSDP(offer); err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	api := webrtc.NewAPI(webrtc.WithMediaEngine(mediaEngine)) | ||||
| 	peerConnection, err := api.NewPeerConnection(config) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	// Set the handler for ICE connection state | ||||
| 	// This will notify you when the peer has connected/disconnected | ||||
| 	peerConnection.OnICEConnectionStateChange(func(connectionState webrtc.ICEConnectionState) { | ||||
| 		fmt.Printf("Connection State has changed %s \n", connectionState.String()) | ||||
| 	}) | ||||
|  | ||||
| 	md := mediadevices.NewMediaDevices(peerConnection) | ||||
|  | ||||
| 	vp8Params, err := vpx.NewVP8Params() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	vp8Params.BitRate = 100000 // 100kbps | ||||
|  | ||||
| 	s, err := md.GetUserMedia(mediadevices.MediaStreamConstraints{ | ||||
| 		Video: func(c *mediadevices.MediaTrackConstraints) { | ||||
| 			c.FrameFormat = prop.FrameFormatExact(frame.FormatI420) // most of the encoder accepts I420 | ||||
| 			c.Enabled = true | ||||
| 			c.Width = prop.Int(640) | ||||
| 			c.Height = prop.Int(480) | ||||
| 			c.VideoTransform = markFacesTransformer | ||||
| 			c.VideoEncoderBuilders = []codec.VideoEncoderBuilder{&vp8Params} | ||||
| 		}, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	for _, tracker := range s.GetTracks() { | ||||
| 		t := tracker.Track() | ||||
| 		tracker.OnEnded(func(err error) { | ||||
| 			fmt.Printf("Track (ID: %s, Label: %s) ended with error: %v\n", | ||||
| 				t.ID(), t.Label(), err) | ||||
| 		}) | ||||
| 		_, err = peerConnection.AddTransceiverFromTrack(t, | ||||
| 			webrtc.RtpTransceiverInit{ | ||||
| 				Direction: webrtc.RTPTransceiverDirectionSendonly, | ||||
| 			}, | ||||
| 		) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Set the remote SessionDescription | ||||
| 	err = peerConnection.SetRemoteDescription(offer) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	// Create an answer | ||||
| 	answer, err := peerConnection.CreateAnswer(nil) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	// Sets the LocalDescription, and starts our UDP listeners | ||||
| 	err = peerConnection.SetLocalDescription(answer) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	// Output the answer in base64 so we can paste it in browser | ||||
| 	fmt.Println(signal.Encode(answer)) | ||||
| 	select {} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Lukas Herman
					Lukas Herman