Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at eli/rtmps 138 lines 4.1 kB view raw
1package media 2 3import ( 4 "context" 5 "os" 6 "path/filepath" 7 "runtime" 8 "testing" 9 10 "git.stream.place/streamplace/c2pa-go/pkg/c2pa" 11 "github.com/stretchr/testify/require" 12 "stream.place/streamplace/pkg/atproto" 13 "stream.place/streamplace/pkg/bus" 14 "stream.place/streamplace/pkg/config" 15 ct "stream.place/streamplace/pkg/config/configtesting" 16 "stream.place/streamplace/pkg/crypto/signers/eip712/eip712test" 17 _ "stream.place/streamplace/pkg/media/mediatesting" 18 "stream.place/streamplace/pkg/model" 19 "stream.place/streamplace/pkg/replication/boring" 20) 21 22func getFixture(name string) string { 23 _, filename, _, _ := runtime.Caller(0) 24 dir := filepath.Dir(filename) 25 return filepath.Join(dir, "..", "..", "test", "fixtures", name) 26} 27 28func getStaticTestMediaManager(t *testing.T) (*MediaManager, MediaSigner) { 29 dir, err := os.MkdirTemp("", "atproto-test-*") 30 require.NoError(t, err) 31 // defer os.RemoveAll(dir) 32 33 fname := filepath.Join(dir, "db.sqlite") 34 mod, err := model.MakeDB(fname) 35 require.NoError(t, err) 36 signer, err := c2pa.MakeStaticSigner(eip712test.KeyBytes) 37 require.NoError(t, err) 38 if err != nil { 39 panic(err) 40 } 41 cli := ct.CLI(t, &config.CLI{ 42 TAURL: "http://timestamp.digicert.com", 43 AllowedStreams: []string{"did:key:zQ3shhoPCrDZWE8CryCEHYCrb1x8mCkr2byTkF5EGJT7dgazC"}, 44 }) 45 atsync := &atproto.ATProtoSynchronizer{ 46 CLI: cli, 47 Model: mod, 48 Bus: bus.NewBus(), 49 } 50 mm, err := MakeMediaManager(context.Background(), cli, signer, &boring.BoringReplicator{}, mod, bus.NewBus(), atsync) 51 require.NoError(t, err) 52 ms, err := MakeMediaSigner(context.Background(), cli, "test-person", signer) 53 require.NoError(t, err) 54 return mm, ms 55} 56 57// func mp4(t *testing.T) []byte { 58// f, err := os.Open(getFixture("video.mpegts")) 59// require.NoError(t, err) 60// defer f.Close() 61// buf := bytes.Buffer{} 62// w := bufio.NewWriter(&buf) 63// err = MuxToMP4(context.Background(), f, w) 64// require.NoError(t, err) 65// return buf.Bytes() 66// } 67 68// func TestMuxToMP4(t *testing.T) { 69// bs := mp4(t) 70// require.Greater(t, len(bs), 0) 71// } 72 73// func TestSignMP4(t *testing.T) { 74// mp4bs := mp4(t) 75// r := bytes.NewReader(mp4bs) 76// _, ms := getStaticTestMediaManager(t) 77// millis := time.Now().UnixMilli() 78// bs, err := ms.SignMP4(context.Background(), r, millis) 79// require.NoError(t, err) 80// require.Greater(t, len(bs), 0) 81// } 82 83// func TestSignMP4WithWallet(t *testing.T) { 84// eip712test.WithTestSigner(func(signer *eip712.EIP712Signer) { 85// cli := ct.CLI(t, &config.CLI{ 86// TAURL: "http://timestamp.digicert.com", 87// AllowedStreams: []aqpub.Pub{}, 88// }) 89// ms, err := MakeMediaSigner(context.Background(), cli, "test person", signer) 90// require.NoError(t, err) 91// mp4bs := mp4(t) 92// r := bytes.NewReader(mp4bs) 93// millis := time.Now().UnixMilli() 94// bs, err := ms.SignMP4(context.Background(), r, millis) 95// require.NoError(t, err) 96// require.Greater(t, len(bs), 0) 97// }) 98// } 99 100// TODO: Would be good to have this tested with SoftHSM 101// func TestSignMP4WithHSM(t *testing.T) { 102// one := 1 103// sc, err := crypto11.Configure(&crypto11.Config{ 104// // TokenLabel: "C2PA Signer", 105// Path: "/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so", 106// Pin: "123456", 107// SlotNumber: &one, 108// }) 109// require.NoError(t, err) 110 111// allsigners, err := sc.FindAllKeyPairs() 112// require.NoError(t, err) 113// signer := allsigners[0] 114// certBs, err := signers.GenerateES256KCert(signer) 115// mm := MediaManager{ 116// cli: &config.CLI{ 117// TAURL: "http://timestamp.digicert.com", 118// }, 119// signer: signer, 120// cert: certBs, 121// user: "testuser", 122// } 123// mp4bs := mp4(t) 124// r := bytes.NewReader(mp4bs) 125// f, err := os.CreateTemp("", "*.mp4") 126// require.NoError(t, err) 127// ms := time.Now().UnixMilli() 128// err = mm.SignMP4(context.Background(), r, f, ms) 129// require.NoError(t, err) 130// } 131 132func TestVerifyMP4(t *testing.T) { 133 f, err := os.Open(getFixture("sample-segment.mp4")) 134 require.NoError(t, err) 135 mm, _ := getStaticTestMediaManager(t) 136 err = mm.ValidateMP4(context.Background(), f) 137 require.NoError(t, err) 138}