implementing video streaming using ffmpeg -- 2
Budget: $10 – $30 CAD
• Request a video from the server
• Open the renderer and stream
• Read in the video frames sent in by the server
• Display these frames to the user
// client
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr
void SendMessage(int sock);
void RecieveFile(int sock);
int main(int argc, char const* argv[]) {
struct sockaddr_in serverAddress; // holds server address
printf("Creating Scoket...\n");
int sock = socket(AF_INET, SOCK_STREAM, 0); // create socket
if(sock == -1) {
printf("Socket Creation: Fail\n");
exit(0);
}
printf("Socket Creation: Complete\n");
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
// Setup serverAddress IP
if (inet_pton(AF_INET, "192.168.2.15", &serverAddress.sin_addr) <= 0) {
printf("Invalid address\n");
exit(0);
}
//Connect to remote server
printf("Connecting to Server...\n");
if(connect(sock, (struct sockaddr* )&serverAddress, sizeof(serverAddress)) < 0)
{
printf("Connection to Server: Fail\n");
exit(1);
}
printf("Connection to server: Complete\n");
//SendMessage(sock);
RecieveFile(sock);
close(sock);
//system("ffplay Keyboard.mp4");
return 0;
}
void SendMessage(int sock) {
char message[MAX];
int n;
for (;;) {
bzero(message, MAX);
printf("Message: ");
n = 0;
while ((message[n++] = getchar()) != '\n')
;
write(sock, message, MAX);
if ((strncmp(message, "exit", 4)) == 0) {
printf("Client Exit...\n");
break;
}
bzero(message, MAX);
read(sock, message, MAX);
printf("From Server : %s", message);
}
}
void RecieveFile(int sock) {
FILE *fp;
char *fileName;
char buffer[MAX];
int n;
read(sock, buffer, MAX);
fileName = buffer;
printf("File name recieved: %s\n", fileName);
fp = fopen(fileName, "wb");
if (fp == NULL) {
perror("[-]Error:");
exit(1);
}
bzero(buffer, MAX);
for(;;) {
n = recv(sock, buffer, MAX, 0);
if (n <= 0) {
break;
}
fwrite(buffer, 1, n, fp);
bzero(buffer, MAX);
}
fclose(fp);
}
• Open the renderer and stream
• Read in the video frames sent in by the server
• Display these frames to the user
// client
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr
void SendMessage(int sock);
void RecieveFile(int sock);
int main(int argc, char const* argv[]) {
struct sockaddr_in serverAddress; // holds server address
printf("Creating Scoket...\n");
int sock = socket(AF_INET, SOCK_STREAM, 0); // create socket
if(sock == -1) {
printf("Socket Creation: Fail\n");
exit(0);
}
printf("Socket Creation: Complete\n");
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
// Setup serverAddress IP
if (inet_pton(AF_INET, "192.168.2.15", &serverAddress.sin_addr) <= 0) {
printf("Invalid address\n");
exit(0);
}
//Connect to remote server
printf("Connecting to Server...\n");
if(connect(sock, (struct sockaddr* )&serverAddress, sizeof(serverAddress)) < 0)
{
printf("Connection to Server: Fail\n");
exit(1);
}
printf("Connection to server: Complete\n");
//SendMessage(sock);
RecieveFile(sock);
close(sock);
//system("ffplay Keyboard.mp4");
return 0;
}
void SendMessage(int sock) {
char message[MAX];
int n;
for (;;) {
bzero(message, MAX);
printf("Message: ");
n = 0;
while ((message[n++] = getchar()) != '\n')
;
write(sock, message, MAX);
if ((strncmp(message, "exit", 4)) == 0) {
printf("Client Exit...\n");
break;
}
bzero(message, MAX);
read(sock, message, MAX);
printf("From Server : %s", message);
}
}
void RecieveFile(int sock) {
FILE *fp;
char *fileName;
char buffer[MAX];
int n;
read(sock, buffer, MAX);
fileName = buffer;
printf("File name recieved: %s\n", fileName);
fp = fopen(fileName, "wb");
if (fp == NULL) {
perror("[-]Error:");
exit(1);
}
bzero(buffer, MAX);
for(;;) {
n = recv(sock, buffer, MAX, 0);
if (n <= 0) {
break;
}
fwrite(buffer, 1, n, fp);
bzero(buffer, MAX);
}
fclose(fp);
}